Les IFRAMEs sont acceptables; les légendes urbaines ne le sont pas.
Lorsque vous "utilisez des iframes", cela ne signifie pas une seule chose. Il s'agit d'une ambiguïté lexicale. Selon le cas d'utilisation, "utiliser des iframes" peut signifier l'une des situations suivantes :
- Quelqu'un d'autre affiche votre contenu dans une iframe
- Vous affichez le contenu de quelqu'un d'autre dans une iframe
- Vous affichez votre propre contenu dans une iframe
Alors dans quels cas vous mettez-vous en danger?
1. Quelqu'un d'autre affiche votre contenu
Ce cas est presque toujours appelé clickjacking - imiter le comportement de votre site, en essayant de tromper vos utilisateurs en utilisant une fausse interface utilisateur plutôt que le vrai site. La confusion ici est que votre utilisation ou non d'iframes est sans importance, c'est simplement pas de votre ressort - c'est quelqu'un d'autre qui utilise des iframes, sur lequel vous ne pouvez rien faire. D'ailleurs, ils n'ont même pas besoin d'iframes spécifiquement : ils peuvent copier votre site de toute autre manière, voler votre html, mettre en œuvre un faux site à partir de zéro, etc.
Donc, abandonner les iframes dans le but de prévenir le clickjacking - cela n'a absolument aucun sens.
2. Vous affichez le contenu de quelqu'un d'autre
De ces trois points ci-dessus, c'est le seul qui est un peu risqué, mais la plupart des articles effrayants que vous lisez tout le temps proviennent d'un monde d'avant l'introduction de la politique de même origine. À l'heure actuelle, il n'est toujours pas recommandé d'inclure n'importe quel site dans le vôtre (qui sait ce qu'il contiendra demain ?), mais si c'est une source de confiance (accuweather, info boursière yahoo, etc.), vous pouvez le faire en toute sécurité. Le gros problème ici est de laisser les utilisateurs (par conséquent, les utilisateurs malveillants) contrôler le src
de l'iframe, lui disant quoi afficher. Ne laissez pas les utilisateurs charger un contenu arbitraire dans votre page, c'est là que réside tout le mal. Mais c'est vrai avec ou sans les iframes. Cela n'a rien à voir avec eux ; cela pourrait se produire en utilisant une balise script
ou un balise style
(bonne chance pour vivre sans elles) - le problème c'est que vous les laissez sortir. Toute sortie sur votre site contenant n'importe quel contenu donné par l'utilisateur est RISQUÉE. Sans le nettoyer (éliminer le HTML), vous ouvrez essentiellement votre site aux attaques XSS, n'importe qui peut insérer une balise </code> dans votre contenu, et c'est une mauvaise nouvelle. Genre, très mauvaise nouvelle.</p> <p><em>Ne publiez jamais d'entrée utilisateur sans vous assurer qu'elle est inoffensive.</em></p> <p>Donc, bien que les iframes soient inoffensifs, la leçon à retenir est : ne les faites pas afficher du contenu de tierces parties sauf si vous faites confiance à la source. En d'autres termes, ne incluez pas de contenu non fiable sur votre site. (De plus, ne sautez pas devant un train de marchandises qui arrive rapidement. Logique.)</p> <p><strong>3. Vous affichez votre propre contenu dans une iframe</strong></p> <p>Celui-ci est évidemment sans danger. Votre page est sûre, le contenu interne de l'iframe est sûr, <em>rien ne peut mal tourner</em>. L'iframe n'est pas un tour de magie ; c'est simplement une technique d'encapsulation, vous avez tout à fait le droit d'afficher une partie de votre contenu dans un sandbox. C'est un peu comme le mettre dans un div ou autre chose, seulement il aura son propre environnement de document.</p> <h3>TL;DR</h3> <ul> <li>Cas 1 : peu importe si vous utilisez des iframes ou non,</li> <li>Cas 2 : pas un problème d'iframe,</li> <li>Cas 3 : cas absolument sans danger.</li> </ul> <p>Veuillez cesser de croire aux légendes urbaines. La vérité est que les <code>iframe</code> sont totalement sûrs. Vous pourriez tout aussi bien accuser les balises <code>script</code> d'être dangereuses ; n'importe quoi peut causer des problèmes lorsqu'il est inséré de manière malveillante dans un site. Mais <em>comment</em> l'a-t-on inséré en premier lieu ? Il doit y avoir une vulnérabilité existante du côté serveur si quelqu'un a pu injecter du contenu html dans un site. Accuser une seule technologie pour une attaque commune (au lieu de trouver la vraie cause) est juste un synonyme de maintien des failles de sécurité ouvertes. Trouvez le dragon derrière le feu.</p> <p>Une sortie non nettoyée est mauvaise ; les iframes ne le sont pas.</p> <hr /> <p><strong>MISE À JOUR :</strong><br> Il existe un attribut appelé <em>sandbox</em>, qui vaut la peine d'être vérifié : <a href="https://www.w3schools.com/tags/att_sandbox.asp" rel="nofollow noreferrer">https://www.w3schools.com/tags/att_sandbox.asp</a></p></x-turndown>
8 votes
Cela ressemble à une vieille légende. Votre fenêtre de navigateur est essentiellement juste un grand iframe.
1 votes
Cela a déjà été demandé sur stackoverflow
2 votes
@Samich - Non, il s'agit de bonnes pratiques, pas spécifiquement de problèmes de sécurité (et le seul problème de sécurité auquel je peux penser provient des tierces parties utilisant des iframes)
0 votes
Pas tellement de sécurité car ce n'est pas considéré comme une meilleure pratique, voir : stackoverflow.com/questions/1081315/why-developers-hate-iframes. Ils étaient beaucoup plus populaires lorsque les gens concevaient avec des tableaux, les divs éliminent presque complètement le besoin d'utiliser des iframes.
1 votes
Étonnamment, un article est apparu près d'une décennie plus tard suggérant que placer tout ce qui contient un formulaire dans un iframe, isolé de tout votre JavaScript tiers, etc., est peut-être nécessaire pour protéger les formulaires contre la récolte. hackernoon.com/…