Warum gelten Iframes als gefährlich und als Sicherheitsrisiko?
122
Warum gelten Iframes als gefährlich und als Sicherheitsrisiko? Kann jemand ein Beispiel für einen Fall beschreiben, in dem es böswillig verwendet werden kann?
@ Samich - Nein, das ist über Best Practice, nicht speziell Sicherheitsprobleme (und das einzige Sicherheitsproblem, das mir einfällt, entsteht durch Dritte, die Iframes verwenden)
Quentin
Nicht so viel Sicherheit, wie es nicht als Best Practice angesehen wird, siehe: stackoverflow.com/questions/1081315/why-developers-hate-iframes Sie waren viel beliebter, wenn Leute, die auch mit Tabellen entworfen wurden, alles teilen, aber die Notwendigkeit von iframes eliminieren.
RandomUs1r
Lustigerweise tauchte fast ein Jahrzehnt später ein Artikel auf, der darauf hinweist, dass es möglicherweise erforderlich ist, alles, was ein Formular enthält, in einen Iframe zu setzen, der von all Ihrem Javascript von Drittanbietern usw. isoliert ist, um Formulare vor dem Ernten zu schützen. hackernoon.com/…
GordonM
Antworten:
82
Sobald Sie Inhalte von einer anderen Domain anzeigen, vertrauen Sie im Grunde darauf, dass diese Domain keine Malware bereitstellt.
An Iframes an sich ist nichts auszusetzen. Wenn Sie den Inhalt des Iframes kontrollieren, sind sie absolut sicher.
Sobald Sie auf Inhalte von einer anderen Domain usw. verlinken, gibt es nichts Spezielles.
Quentin
5
Ein korrekt implementierter Browser (auch bekannt als User Agent) lässt nicht zu, dass der Iframe-Inhalt außerhalb des Iframes ausläuft. Wenn das Host-Dokument (eines, das das <iframe>Element enthält) einen geeigneten Stil hat und darauf hinweist, dass der Iframe nicht vertrauenswürdigen Inhalt enthält, gibt es kein Problem. Natürlich Modulo echte Schwachstellen im Browser. Kurz gesagt, ein <iframe>ist ungefähr so sicher wie ein <a href>.
Mikko Rantalainen
2
Was ist mit einem versteckten Iframe, der zur selben Domain gehört? Ist das absolut sicher?
Ciaran Gallagher
2
Das Ausblenden <iframe>derselben Domäne kann ein Sicherheitsrisiko darstellen, wenn der Inhalt des ausgeblendeten Iframes vom Angreifer geändert werden kann. Auf diese Weise kann der Angreifer den XSS-Angriff im Verborgenen <iframe>auf jede Seite Ihrer Website ausweiten, die auf diesen <iframe>Inhalt verweist . Weitere Informationen finden Sie unter stackoverflow.com/a/9428051/334451 .
Mikko Rantalainen
Interessanterweise könnte ein iFrame tatsächlich ein nützlicher Schutz vor dem umgekehrten Fall sein. Wenn Ihre Site viele Skripte von Drittanbietern enthält, müssen Sie Formulare von diesen isolieren. Eine vorgeschlagene Möglichkeit bestand darin, das Formular auf einer eigenen Minimalseite ohne Javascript eines Drittanbieters abzulegen und es in einem Iframe auf der Hostseite anzuzeigen. hackernoon.com/…
GordonM
140
Das IFRAMEElement kann ein Sicherheitsrisiko darstellen, wenn Ihre Site in eine IFRAMEfeindliche Site eingebettet ist . Google "Clickjacking" für weitere Details. Beachten Sie, dass es keine Rolle spielt, ob Sie verwenden <iframe>oder nicht. Der einzige wirkliche Schutz vor diesem Angriff besteht darin, einen HTTP-Header hinzuzufügen X-Frame-Options: DENYund zu hoffen, dass der Browser seinen Job kennt.
Darüber hinaus kann das IFRAME-Element ein Sicherheitsrisiko darstellen, wenn eine Seite Ihrer Website eine XSS-Sicherheitsanfälligkeit enthält, die ausgenutzt werden kann . In diesem Fall kann der Angreifer den XSS-Angriff auf jede Seite innerhalb derselben Domäne erweitern, die zum Laden innerhalb einer <iframe>Seite mit XSS-Sicherheitsanfälligkeit überredet werden kann . Dies liegt daran, dass Inhalte desselben Ursprungs (derselben Domäne) auf das übergeordnete Inhalts-DOM zugreifen dürfen (praktisch JavaScript im "Host" -Dokument ausführen). Die einzige wirkliche Schutzmethode vor diesem Angriff besteht darin, einen HTTP-Header hinzuzufügen X-Frame-Options: DENYund / oder alle vom Benutzer übermittelten Daten immer korrekt zu codieren (dh niemals eine XSS-Sicherheitslücke auf Ihrer Site zu haben - leichter gesagt als getan).
Das ist die technische Seite des Problems. Darüber hinaus gibt es das Problem der Benutzeroberfläche. Wenn Sie Ihren Benutzern beibringen, darauf zu vertrauen, dass sich die URL-Leiste beim Klicken auf Links nicht ändern soll (z. B. wenn Ihre Website einen großen Iframe mit dem gesamten tatsächlichen Inhalt verwendet), werden die Benutzer auch im Falle der tatsächlichen Sicherheit in Zukunft nichts bemerken Verletzlichkeit. Beispielsweise könnte Ihre Site eine XSS-Sicherheitsanfälligkeit aufweisen, die es dem Angreifer ermöglicht, Inhalte aus feindlichen Quellen in Ihren Iframe zu laden. Niemand konnte den Unterschied feststellen, da die URL-Leiste immer noch mit dem vorherigen Verhalten identisch ist (sich nie ändert) und der Inhalt "gültig" aussieht, obwohl er von einer feindlichen Domäne stammt, die Benutzeranmeldeinformationen anfordert.
Wenn jemand behauptet, dass die Verwendung eines <iframe>Elements auf Ihrer Website gefährlich ist und ein Sicherheitsrisiko darstellt, versteht er nicht, was das <iframe>Element tut, oder er spricht über die Möglichkeit <iframe>verwandter Schwachstellen in Browsern. Die Sicherheit des <iframe src="...">Tags ist gleich <img src="..."oder <a href="...">solange keine Schwachstellen im Browser vorhanden sind. Und wenn es eine geeignete Verwundbarkeit ist, könnte es möglich sein , sie auszulösen auch ohne <iframe>, <img>oder <a>Element, so ist es nicht wert für dieses Problem betrachten.
Beachten Sie jedoch, dass Inhalte <iframe>von standardmäßig die Navigation auf oberster Ebene initiieren können . Das heißt, Inhalte innerhalb von <iframe>dürfen automatisch einen Link über den aktuellen Seitenstandort öffnen (der neue Speicherort wird in der Adressleiste angezeigt). Die einzige Möglichkeit, dies zu vermeiden, besteht darin, ein sandboxAttribut ohne Wert hinzuzufügen allow-top-navigation. Zum Beispiel <iframe sandbox="allow-forms allow-scripts" ...>. Leider deaktiviert Sandbox auch immer alle Plugins. Beispielsweise können Youtube-Inhalte nicht in einer Sandbox gespeichert werden, da der Flash Player weiterhin zum Anzeigen aller Youtube-Inhalte erforderlich ist. Kein Browser unterstützt die Verwendung von Plugins und die gleichzeitige Nichtzulassung der Navigation auf oberster Ebene.
Beachten Sie, dass dies X-Frame-Options: DENYauch vor Rendering-Side-Channel-Angriffen schützt, bei denen Inhalte über den Ursprung hinweg gelesen werden können (auch als " Pixel Perfect Timing Attacks " bezeichnet).
Schön, sollte aber nicht "This is because content from the same origin (same domain) is allowed to access the parent content DOM (practically execute JavaScript in the "host" document)."in Richtung des (übergeordneten) Dokuments umformuliert werden, das eine XSS-Sicherheitsanfälligkeit für das (untergeordnete) Dokument im Iframe enthält?
Shuzheng
@Shuzheng Die Sicherheitsanfälligkeit geht in beide Richtungen. Wenn Sie sie <iframe>auf einer Seite verwenden, können Sie die Sicherheitsanfälligkeit vom Inhalt im Iframe auf das Hostdokument ausweiten . Die Frage war <iframe>, gefährlich zu sein, und wenn das Host-Dokument eine XSS-Sicherheitslücke aufweist, benötigen Sie das <iframe>Element wirklich nicht .
Mikko Rantalainen
13
Ich gehe von einem domänenübergreifenden iFrame aus, da das Risiko vermutlich geringer wäre, wenn Sie es selbst kontrollieren würden.
Clickjacking ist ein Problem, wenn Ihre Site als Iframe enthalten ist
Ein kompromittierter iFrame kann schädlichen Inhalt anzeigen (stellen Sie sich vor, der iFrame zeigt ein Anmeldefeld anstelle einer Anzeige an).
Ein enthaltener Iframe kann bestimmte JS-Aufrufe wie Alarm und Eingabeaufforderung ausführen, die Ihren Benutzer stören könnten
Ein enthaltener Iframe kann über location.href umleiten (stellen Sie sich einen 3p-Frame vor, der den Kunden von bankofamerica.com zu bankofamerica.fake.com umleitet).
Malware im 3p-Frame (Java / Flash / ActiveX) kann Ihren Benutzer infizieren
"Gefährlich" und "Sicherheitsrisiko" sind nicht die ersten Dinge, die einem in den Sinn kommen, wenn Leute Iframes erwähnen ... aber sie können bei Clickjacking- Angriffen verwendet werden.
Antworten:
Sobald Sie Inhalte von einer anderen Domain anzeigen, vertrauen Sie im Grunde darauf, dass diese Domain keine Malware bereitstellt.
An Iframes an sich ist nichts auszusetzen. Wenn Sie den Inhalt des Iframes kontrollieren, sind sie absolut sicher.
quelle
<iframe>
Element enthält) einen geeigneten Stil hat und darauf hinweist, dass der Iframe nicht vertrauenswürdigen Inhalt enthält, gibt es kein Problem. Natürlich Modulo echte Schwachstellen im Browser. Kurz gesagt, ein<iframe>
ist ungefähr so sicher wie ein<a href>
.<iframe>
derselben Domäne kann ein Sicherheitsrisiko darstellen, wenn der Inhalt des ausgeblendeten Iframes vom Angreifer geändert werden kann. Auf diese Weise kann der Angreifer den XSS-Angriff im Verborgenen<iframe>
auf jede Seite Ihrer Website ausweiten, die auf diesen<iframe>
Inhalt verweist . Weitere Informationen finden Sie unter stackoverflow.com/a/9428051/334451 .Das
IFRAME
Element kann ein Sicherheitsrisiko darstellen, wenn Ihre Site in eineIFRAME
feindliche Site eingebettet ist . Google "Clickjacking" für weitere Details. Beachten Sie, dass es keine Rolle spielt, ob Sie verwenden<iframe>
oder nicht. Der einzige wirkliche Schutz vor diesem Angriff besteht darin, einen HTTP-Header hinzuzufügenX-Frame-Options: DENY
und zu hoffen, dass der Browser seinen Job kennt.Darüber hinaus kann das IFRAME-Element ein Sicherheitsrisiko darstellen, wenn eine Seite Ihrer Website eine XSS-Sicherheitsanfälligkeit enthält, die ausgenutzt werden kann . In diesem Fall kann der Angreifer den XSS-Angriff auf jede Seite innerhalb derselben Domäne erweitern, die zum Laden innerhalb einer
<iframe>
Seite mit XSS-Sicherheitsanfälligkeit überredet werden kann . Dies liegt daran, dass Inhalte desselben Ursprungs (derselben Domäne) auf das übergeordnete Inhalts-DOM zugreifen dürfen (praktisch JavaScript im "Host" -Dokument ausführen). Die einzige wirkliche Schutzmethode vor diesem Angriff besteht darin, einen HTTP-Header hinzuzufügenX-Frame-Options: DENY
und / oder alle vom Benutzer übermittelten Daten immer korrekt zu codieren (dh niemals eine XSS-Sicherheitslücke auf Ihrer Site zu haben - leichter gesagt als getan).Das ist die technische Seite des Problems. Darüber hinaus gibt es das Problem der Benutzeroberfläche. Wenn Sie Ihren Benutzern beibringen, darauf zu vertrauen, dass sich die URL-Leiste beim Klicken auf Links nicht ändern soll (z. B. wenn Ihre Website einen großen Iframe mit dem gesamten tatsächlichen Inhalt verwendet), werden die Benutzer auch im Falle der tatsächlichen Sicherheit in Zukunft nichts bemerken Verletzlichkeit. Beispielsweise könnte Ihre Site eine XSS-Sicherheitsanfälligkeit aufweisen, die es dem Angreifer ermöglicht, Inhalte aus feindlichen Quellen in Ihren Iframe zu laden. Niemand konnte den Unterschied feststellen, da die URL-Leiste immer noch mit dem vorherigen Verhalten identisch ist (sich nie ändert) und der Inhalt "gültig" aussieht, obwohl er von einer feindlichen Domäne stammt, die Benutzeranmeldeinformationen anfordert.
Wenn jemand behauptet, dass die Verwendung eines
<iframe>
Elements auf Ihrer Website gefährlich ist und ein Sicherheitsrisiko darstellt, versteht er nicht, was das<iframe>
Element tut, oder er spricht über die Möglichkeit<iframe>
verwandter Schwachstellen in Browsern. Die Sicherheit des<iframe src="...">
Tags ist gleich<img src="..."
oder<a href="...">
solange keine Schwachstellen im Browser vorhanden sind. Und wenn es eine geeignete Verwundbarkeit ist, könnte es möglich sein , sie auszulösen auch ohne<iframe>
,<img>
oder<a>
Element, so ist es nicht wert für dieses Problem betrachten.Beachten Sie jedoch, dass Inhalte
<iframe>
von standardmäßig die Navigation auf oberster Ebene initiieren können . Das heißt, Inhalte innerhalb von<iframe>
dürfen automatisch einen Link über den aktuellen Seitenstandort öffnen (der neue Speicherort wird in der Adressleiste angezeigt). Die einzige Möglichkeit, dies zu vermeiden, besteht darin, einsandbox
Attribut ohne Wert hinzuzufügenallow-top-navigation
. Zum Beispiel<iframe sandbox="allow-forms allow-scripts" ...>
. Leider deaktiviert Sandbox auch immer alle Plugins. Beispielsweise können Youtube-Inhalte nicht in einer Sandbox gespeichert werden, da der Flash Player weiterhin zum Anzeigen aller Youtube-Inhalte erforderlich ist. Kein Browser unterstützt die Verwendung von Plugins und die gleichzeitige Nichtzulassung der Navigation auf oberster Ebene.Beachten Sie, dass dies
X-Frame-Options: DENY
auch vor Rendering-Side-Channel-Angriffen schützt, bei denen Inhalte über den Ursprung hinweg gelesen werden können (auch als " Pixel Perfect Timing Attacks " bezeichnet).quelle
"This is because content from the same origin (same domain) is allowed to access the parent content DOM (practically execute JavaScript in the "host" document)."
in Richtung des (übergeordneten) Dokuments umformuliert werden, das eine XSS-Sicherheitsanfälligkeit für das (untergeordnete) Dokument im Iframe enthält?<iframe>
auf einer Seite verwenden, können Sie die Sicherheitsanfälligkeit vom Inhalt im Iframe auf das Hostdokument ausweiten . Die Frage war<iframe>
, gefährlich zu sein, und wenn das Host-Dokument eine XSS-Sicherheitslücke aufweist, benötigen Sie das<iframe>
Element wirklich nicht .Ich gehe von einem domänenübergreifenden iFrame aus, da das Risiko vermutlich geringer wäre, wenn Sie es selbst kontrollieren würden.
quelle
"Gefährlich" und "Sicherheitsrisiko" sind nicht die ersten Dinge, die einem in den Sinn kommen, wenn Leute Iframes erwähnen ... aber sie können bei Clickjacking- Angriffen verwendet werden.
quelle
iframe ist auch anfällig für Cross Frame Scripting:
quelle