wake-up-neo.net

Wie kann ich die X-Frame-Optionen umgehen: SAMEORIGIN HTTP Header?

Ich entwickle eine Webseite, auf der in einem Iframe ein Bericht angezeigt werden muss, der vom SharePoint-Server eines anderen Unternehmens bereitgestellt wird. Sie sind damit einverstanden.

Die Seite, die wir im iframe rendern möchten, gibt uns X-Frame-Optionen: SAMEORIGIN, wodurch der Browser (mindestens IE8) die Wiedergabe des Inhalts in einem Frame ablehnt.

Ist dies etwas, das sie kontrollieren können, oder ist es etwas, das SharePoint nur standardmäßig tut? Wenn ich sie bitte, das auszuschalten, könnten sie es dann überhaupt tun?

Zweitens, kann ich etwas tun, um den Browser anzuweisen, diesen http-Header zu ignorieren und nur den Frame zu rendern?

41
Daniel Coffman

Wenn sich die zweite Firma darüber freut, dass Sie auf ihre Inhalte in einem IFrame zugreifen können, müssen sie die Einschränkung aufheben - dies können sie relativ einfach in der IIS config.

Es gibt nichts, was Sie tun können, um es zu umgehen, und alles, was funktioniert, sollte schnell in einem Sicherheits-Hotfix gepatcht werden. Sie können dem Browser nicht sagen, dass er den Frame nur rendern soll, wenn der Header des Quellinhalts sagt, dass er in Frames nicht zulässig ist. Das würde das Session-Hijacking erleichtern.

Wenn der Inhalt nur GET ist, geben Sie keine Daten zurück, und Sie könnten die Seite serverseitig abrufen und den Inhalt ohne den Header als Proxy verwenden. Dann sollte jedoch jeder zurückgegebene Beitrag ungültig werden.

28
Keith

UPDATE 2019: Sie können X-Frame-Options In einem umgehen <iframe> Mit meiner X-Frame-Bypass Web Component. Es erweitert das IFrame-Element durch die Verwendung mehrerer CORS-Proxys und wurde in den neuesten Versionen von Firefox und Chrome getestet.

Sie können es wie folgt verwenden:

  1. (Optional) Fügen Sie das Benutzerdefinierte Elemente mit eingebauter erweiterter Polyfüllung für Safari hinzu:

    <script src="https://unpkg.com/@ungap/custom-elements-builtin"></script>
    
  2. Binden Sie das X-Frame-Bypass-JS-Modul ein:

    <script type="module" src="x-frame-bypass.js"></script>
    
  3. Fügen Sie das benutzerdefinierte X-Frame-Bypass-Element ein:

    <iframe is="x-frame-bypass" src="https://example.org/"></iframe>
    
25
niutech

Der X-Frame-Options-Header ist eine Sicherheitsfunktion, die auf Browserebene erzwungen wird.

Wenn Sie die Kontrolle über Ihre Benutzerbasis haben (IT-Abteilung für Unternehmensanwendungen), können Sie so etwas wie ein Greasemonkey-Skript ausprobieren (wenn Sie a) Greasemonkey für alle bereitstellen und b) Ihr Skript auf gemeinsame Weise bereitstellen können) ...

Alternativ können Sie deren Ergebnis als Proxy verwenden. Erstellen Sie einen Endpunkt auf Ihrem Server, und lassen Sie diesen eine Verbindung zum Zielendpunkt herstellen und den Datenverkehr einfach rückwärts leiten.

8
Rob

Ja, Fiddler ist eine Option für mich:

  1. Öffnen Sie Fiddler-Menü> Regeln> Regeln anpassen (dies bearbeitet CustomRules.js).
  2. Finden Sie die Funktion OnBeforeResponse
  3. Fügen Sie die folgenden Zeilen hinzu:

    oSession.oResponse.headers.Remove("X-Frame-Options");
    oSession.oResponse.headers.Add("Access-Control-Allow-Origin", "*");
    
  4. Denken Sie daran, das Skript zu speichern!
4
kernowcode

Was die zweite Frage betrifft, können Sie Fiddler Filter verwenden, um die Antwort einzustellen X-Frame-Options Header manuell auf etwas wie ALLOW-FROM *. Aber natürlich funktioniert dieser Trick nur für Sie - andere Benutzer können den iframe-Inhalt immer noch nicht sehen (wenn sie nicht dasselbe tun).

4
Pj_pavel