it-swarm.com.de

X-Frame-Optionen: ALLOW-FROM in Firefox und chrome

Ich implementiere ein "Passthrough" für X-Frame-Options, Damit eine Partnerwebsite die Website meines Arbeitgebers in einen Iframe einbindet, wie in folgendem Artikel beschrieben: http://blogs.msdn.com/b /ieinternals/archive/2010/03/30/combating-clickjacking-with-x-frame-options.aspx

(URLs zum Posten aufteilen)

Kurz gesagt, die Seite unseres Partners enthält einen Iframe mit einer URL für unsere Domain. Für jede Seite in unserer Domain wird ein spezielles URL-Argument wie &@mykey=topleveldomain.com Hinzugefügt, das uns mitteilt, was die Top-Level-Domain der Seite ist.

Unsere Filter nehmen die Partner-TLD, falls vorhanden, von der URL auf und validieren sie anhand einer Whitelist. Wenn es auf der Liste steht, versenden wir den Header X-Frame-Options Mit dem Wert ALLOW-FROM topleveldomain.com (Und fügen einen Cookie für zukünftige Klicks hinzu). Wenn es nicht auf unserer Whitelist steht, versenden wir SAMEORIGIN oder DENY.

Das Problem ist, dass es so aussieht, als würde das Senden von ALLOW-FROM domain Zu einem No-Op für die neuesten Versionen von Firefox und Google Chrome führen. Zumindest IE8 scheint ALLOW-FROM Korrekt zu implementieren.

Schauen Sie sich diese Seite an: http://www.enhanceie.com/test/clickjack . Direkt nach dem 5. (von 5) Feldern, in denen "Inhalt angezeigt werden soll", befindet sich ein Feld, in dem NICHT Inhalt angezeigt werden soll, das jedoch angezeigt wird. In diesem Fall sendet die Seite im iframe X-Frame-Options: ALLOW-FROM http://www.debugtheweb.com, Eine entschieden andere TLD als http://www.enhanceie.com. Der Rahmen zeigt jedoch weiterhin Inhalt an.

Gibt es einen Einblick, ob X-Frame-Options Wirklich mit ALLOW-FROM In allen relevanten (Desktop-) Browsern implementiert ist? Vielleicht hat sich die Syntax geändert?

Einige interessante Links:

62
Rob

ALLOW-FROM wird in Chrome oder Safari nicht unterstützt. Siehe MDN-Artikel: https://developer.mozilla.org/en-US/docs/Web/HTTP/X- Frame-Optionen

Sie arbeiten bereits daran, einen benutzerdefinierten Header zu erstellen und ihn mit den richtigen Daten zu senden. Können Sie den Header nicht einfach ausschließen, wenn Sie feststellen, dass er von einem gültigen Partner stammt, und jeder anderen Anfrage DENY hinzufügen? Ich sehe den Vorteil von AllowFrom nicht, wenn Sie die Logik bereits dynamisch aufbauen?

37
Kinlan

Ich habe diese Frage gestellt und nie das Feedback gesehen (das einige Monate später eingegangen ist, wie es scheint :).

Wie Kinlan bereits erwähnt hat, wird ALLOW-FROM als X-Frame-Options-Wert nicht in allen Browsern unterstützt.

Die Lösung bestand darin, basierend auf dem Browsertyp zu verzweigen. Versenden Sie für IE X-Frame-Options . Für alle anderen versenden Sie X-Content-Security-Policy .

Hoffe, das hilft und tut mir leid, dass ich so lange gebraucht habe, um den Kreis zu schließen!

18
Rob

Für Chrome anstelle von

response.AppendHeader("X-Frame-Options", "ALLOW-FROM " + Host);

sie müssen Content-Security-Policy hinzufügen

string selfAuth = System.Web.HttpContext.Current.Request.Url.Authority;
string refAuth = System.Web.HttpContext.Current.Request.UrlReferrer.Authority;
response.AppendHeader("Content-Security-Policy", "default-src 'self' 'unsafe-inline' 'unsafe-eval' data: *.msecnd.net vortex.data.Microsoft.com " + selfAuth + " " + refAuth);

zu den HTTP-Response-Headern.
Beachten Sie, dass Sie auf dem Server überprüft haben, ob refAuth zulässig ist.
Beachten Sie außerdem, dass Sie die Browsererkennung durchführen müssen, um das Hinzufügen des Headers allow-from Für Chrome (gibt Fehler auf der Konsole aus) zu vermeiden.

Einzelheiten finden Sie unter meine Antwort hier.

6
Stefan Steiger