86 votes

Comment empêcher le chargement de la page de mon site par le biais d'un cadre de site tiers ou d'un iFrame ?

Comment puis-je savoir que ma page est intégrée en tant que cadre à un autre site pendant le chargement de la page ? Je suppose que l'en-tête de demande de référence ne peut pas m'aider ici ? Merci.

0 votes

Bonjour, John, je ne peux pas dire que j'ai besoin d'une solution complète ici, juste une direction à suivre est suffisante, après avoir trouvé une réponse à ma question, je la poste toujours comme une réponse, c'est la seule façon pour moi de participer à la communauté.

0 votes

Remarque : le paramétrage de la balise méta ne sert à rien ! Par exemple, <meta http-equiv="X-Frame-Options" content="deny"> n'a aucun effet. Ne l'utilisez pas ! Ce n'est qu'en paramétrant à travers l'en-tête HTTP comme les exemples ci-dessous, que les X-Frame-Options fonctionneront. developer.mozilla.org/fr/docs/Web/HTTP/Headers/X-Frame-Options

105voto

Maerlyn Points 18190

Vous ne pouvez pas le vérifier du côté du serveur, mais vous pouvez utiliser le javascript pour le détecter après le chargement de la page. Comparez top y self s'ils ne sont pas identiques, vous êtes dans un cadre.

En outre, certains navigateurs modernes respectent l'attribut X-FRAME-OPTIONS qui peut avoir deux valeurs :

  • DENY - empêche la page d'être rendue si elle est contenue dans un cadre.
  • SAMEORIGIN - même chose que ci-dessus, sauf si la page appartient au même domaine que le détenteur du frameset de premier niveau.

Parmi les utilisateurs, citons 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 :

  • IE8 et IE9
  • Opera 10.50
  • Safari 4
  • Chrome 4.1.249.1042
  • Firefox 3.6.9 (versions plus anciennes avec NoScript )

2 votes

Puisque j'ai atterri ici par le biais d'une recherche Google, j'ajouterai que Firefox a ajouté X-FRAME-OPTIONS en août 2010 avec FF3.6.9 : michael-coates.blogspot.com/2010/08/

0 votes

1 votes

Cette réponse est périmée. Voir CSP .

46voto

Felix Kling Points 247451

Stackoverflow inclut quelques JS pour le tester ( master.js ). En voici la partie pertinente :

if(top!=self){
    top.location.replace(document.location);
    alert("For security reasons, framing is not allowed; click OK to remove the frames.")
}

Mais n'oubliez pas que JS peut être désactivé.

0 votes

Cette approche est particulièrement utile si vous souhaitez envoyer un message soit à la personne qui place votre contenu dans une iframe, soit à l'utilisateur final de son site qui consulte votre contenu dans l'iframe.

31voto

rvighne Points 2382

Pour navigateurs modernes vous pouvez utiliser la CSP (Content Security Policy), qui est une norme. L'en-tête suivant empêchera le document de se charger dans un cadre quelconque :

Content-Security-Policy: frame-ancestors 'none'

(IE 11 a besoin de l'option X- préfixe, cependant). Vous pouvez également modifier 'none' à l'origine sur laquelle le cadrage est autorisé, comme votre propre site.

Pour couvrir les navigateurs plus anciens, il est préférable de l'utiliser conjointement avec La réponse de @Maerlyn .

1 votes

Avec tout le respect que je vous dois, votre réponse n'est pas assez claire. S'agit-il de code d'en-tête ou de PHP ? Par exemple.

2 votes

@GaryCarlyleCook C'est un en-tête HTTP qui doit faire partie de la réponse au navigateur lorsqu'il sert une page. Ce n'est pas du code PHP, bien que vous puissiez utiliser PHP pour l'envoyer. en-tête()

15voto

iman Points 587

Vous pouvez empêcher le chargement de votre page dans une 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 adresse de votre page et force le conteneur à afficher votre page.

1 votes

sandbox sur les iframes permet d'interdire de telles manipulations d'échappement du cadre. Cette méthode n'est donc pas un moyen sûr d'empêcher le cadrage, au cas où votre préoccupation serait les questions de sécurité.

6voto

earl3s Points 821

Vous pouvez également bloquer un domaine spécifique si votre contenu ne vous dérange pas à certains endroits mais que vous ne voulez pas qu'il apparaisse sur un certain site. Par exemple, si offendingdomain.com intégrait votre contenu, vous pourriez faire ça :

<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 si c'est le offendingdomain.com qui consiste à intégrer votre contenu. Ce script enverra ensuite cette iframe vers une certaine vidéo youtube célèbre comme punition. En effet, ils se sont juste Rick-Rolled eux-mêmes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X