Comment puis-je savoir que ma page est intégrée en tant que cadre à un autre site lors du chargement de la page? Je suppose que l'en-tête de la demande de référence ne peut pas m'aider ici? Merci.
Vous ne pouvez pas le vérifier du côté du serveur, mais vous pouvez utiliser javascript pour le détecter une fois la page chargée. Comparez top
et self
, s'ils ne sont pas identiques, vous êtes dans un cadre.
De plus, certains navigateurs modernes respectent le X-FRAME-OPTIONS
en-tête, qui peut avoir deux valeurs:
Les utilisateurs incluent Picasa de Google, qui ne peut pas être intégré dans un cadre.
Navigateurs qui prennent en charge l'en-tête, avec la version minimale:
Stackoverflow inclut du JS pour le tester (master.js
). C'est la partie pertinente de celui-ci:
if(top!=self){
top.location.replace(document.location);
alert("For security reasons, framing is not allowed; click OK to remove the frames.")
}
Mais gardez à l'esprit que JS peut être désactivé.
Pour navigateurs modernes , vous pouvez utiliser CSP (Content Security Policy), qui est une norme. L'en-tête suivant empêchera le document de se charger n'importe où dans un cadre:
Content-Security-Policy: frame-ancestors 'none'
(IE 11 a besoin du X-
préfixe, cependant). Vous pouvez également modifier 'none'
à l'origine sur laquelle le cadrage est autorisé, comme votre propre site.
Pour couvrir les anciens navigateurs, il est préférable de l'utiliser avec @ réponse de Maerlyn .
vous pouvez empêcher le chargement de votre page dans un iframe avec javascript
<script type="text/javascript">
if ( window.self !== window.top ) {
window.top.location.href=window.location.href;
}
</script>
ce code change l'adresse du conteneur de l'iframe de votre page en votre adresse de page et force le conteneur à afficher votre page.
Ou vous pouvez bloquer un domaine spécifique si cela ne vous dérange pas votre contenu dans certains endroits mais ne le voulez pas sur un certain site. Par exemple, si offendingdomain.com
intégrait votre contenu, vous pouvez le faire:
<script type="text/javascript">
if(document.referrer.indexOf("offendingdomain.com") != -1) {
window.location = "http://www.youtube.com/watch_popup?v=oHg5SJYRHA0";
}
</script>
Cela vérifierait l'emplacement du document parent et verrait s'il s'agit du offendingdomain.com
qui incorpore votre contenu. Ce script enverra ensuite cette iframe à une certaine vidéo YouTube célèbre comme punition. En fait, ils se sont juste roulés.
Utilisez javascript pour vérifier s'il a été chargé sur iframe en plaçant le script suivant à la fin de votre fichier php et redirigez-le vers une page qui affiche un avertissement ou remarquez que votre page ne doit pas être chargée à l'aide d'iframe.
<script type="text/javascript">
if(top.location != window.location) {
window.location = '/error_iframe.php';
}
</script>