web-dev-qa-db-fra.com

Pourquoi les navigateurs appliquent-ils la politique de sécurité de même origine sur les iframes?

J'ai fait un petit test sur Chrome (V37) aujourd'hui. J'ai créé une petite page et l'ai chargée dans le navigateur:

<!DOCTYPE html>
<html>
<head>
    <title>Untitled Document</title>
</head>
<body>
    <p>Normal page</p>
    <iframe src="https://security.stackexchange.com/" />
</body>
</html>

En inspectant la console, j'ai trouvé ce message d'erreur:

Refusé d'afficher ' https://security.stackexchange.com/ ' dans un cadre car il a défini 'X-Frame-Options' sur 'SAMEORIGIN'.

Pourquoi les navigateurs doivent-ils appliquer une politique de même origine sur iframes?

60
sampathsris

Révision: politique de même origine

Tout d'abord, clarifions que le comportement observé ici (l'iframe ne s'affiche pas) est beaucoup plus strict que la politique par défaut de même origine. Si vous comprenez déjà cela, passez à " Que se passe-t-il réellement" ci-dessous.

Pour revoir, la même stratégie d'origine empêche scripts d'avoir un accès programmatique au contenu des ressources cross-Origin. Examinez comment la même politique d'origine s'applique à différents types de ressources:

  • Images: Une balise <img> Affichera visuellement une image d'origine croisée à un utilisateur, mais elle ne permettra pas à un script de lire le le contenu de l'image lorsqu'il est chargé dans un <canvas> (c'est-à-dire que toDataURL échouera si le canevas contient des images d'origine croisée)
  • Scripts: Les scripts Cross-Origin s'exécutent lorsqu'ils sont référencés dans un élément <script>, Mais la page ne peut que s'exécuter le script, pas lire son contenu.
  • Iframe: Comme les images, le contenu d'une page cross-Origin encadrée apparaît visuellement à l'utilisateur, mais les scripts de la page de cadrage externe ne sont pas autorisés à accéder à le contenu de la page encadrée.

La stratégie de même origine s'applique aux iframes pour la même raison qu'elle s'applique à tous les autres types de ressources: la page Web encadrée (ou l'image affichée, ou la ressource accessible via Ajax) est récupérée à l'aide des informations d'identification de l'origine de la ressource. (par exemple, la requête HTTP pour récupérer une ressource à partir de google.com inclut les cookies de mon navigateur définis pour google.com). La page qui a émis la demande ne doit pas bénéficier d'un accès en lecture à une ressource extraite avec des informations d'identification d'une origine différente.

Ce qui se passe réellement: X-Frame-Options

Cependant, le comportement que vous voyez ici est plus strict que la même politique d'origine: la page encadrée n'est pas affichée pas du tout. Le serveur multi-origine qui héberge la page (potentielle) encadrée demande ce comportement de blocage en envoyant un X-Frame-Options en-tête de réponse , qui spécifie comment la page peut être encadrée.

  • [~ # ~] refuser [~ # ~] La page ne peut pas être affichée dans un cadre, quel que soit le site qui tente de le faire.
  • [~ # ~] même origine [~ # ~] La page ne peut être affichée que dans un cadre de même origine que la page elle-même.
  • ALLOW-FROM uri La page ne peut être affichée que dans un cadre sur l'origine spécifiée.

Ici, le site envoie X-Frame-Options: SAMEORIGIN, Ce qui signifie que le site ne peut être encadré que par des pages de même origine que la page encadrée.

Du point de vue de la sécurité, cela est fait pour empêcher clickjacking (également appelé attaque "UI repair"). Dans une attaque de détournement de clic, la page affiche un composant activé par clic d'un autre site à l'intérieur d'un <iframe> Et incite l'utilisateur à cliquer dessus (généralement en superposant le composant cible au-dessus d'une fonctionnalité apparemment cliquable du cadrage). site).

Pour un exemple trivial, un site peut positionner un <iframe> Transparent de http://security.stackexchange.com De sorte que le lien de "déconnexion" dans le site encadré soit directement au-dessus d'un "Cliquez ici pour réclamer votre argent gratuit " bouton. Lors de l'affichage de la page de cadrage, l'utilisateur tente de réclamer l'argent gratuit et se retrouve soudain déconnecté de Stack Exchange. Lorsque http://security.stackexchange.com Envoie un en-tête X-Frame-Options: SAMEORIGIN, La page d'origine malveillante croisée ne reçoit à la place qu'un <iframe> Vide; l'utilisateur ne clique pas involontairement sur un lien de déconnexion, car aucun contenu du site encadré n'est parvenu sur la page rendue.

OWASP a une page détaillant défenses contre le détournement de clics .

42
apsillers

Les administrateurs de security.stackexchange.com ont configuré le site pour qu'il ne soit pas encadré sur d'autres sites. Cela est généralement fait pour empêcher les attaques de détournement de clics, pour empêcher d'autres personnes d'intégrer security.stackexchange.com dans une page pleine d'annonces et d'économiser du trafic. Vous pouvez en savoir plus sur X-Frame-Options en-tête ici .

Cette protection est désactivée par défaut.

38
abacabadabacaba