Ich schreibe eine winzige Webseite, deren Zweck darin besteht, einige andere Seiten einzurahmen, um sie einfach in einem einzigen Browserfenster zu konsolidieren und die Anzeige zu vereinfachen. Einige der Seiten, die ich zu rahmen versuche, verbieten das Einrahmen und werfen ein "Dokument kann nicht angezeigt werden, da die Anzeige durch X-Frame-Optionen verboten ist". Fehler in Chrome. Ich verstehe, dass dies eine Sicherheitsbeschränkung ist (aus gutem Grund) und habe keinen Zugriff darauf, sie zu ändern.
Gibt es eine alternative Framing- oder Non-Framing-Methode zum Anzeigen von Seiten in einem einzelnen Fenster, die nicht durch den X-Frame-Options-Header ausgelöst werden?
iframe
frames
x-frame-options
Garen Checkley
quelle
quelle
Antworten:
Ich hatte ein ähnliches Problem, bei dem ich versuchte, Inhalte von unserer eigenen Site in einem Iframe anzuzeigen (als Dialog im Lightbox-Stil mit Colorbox ), und bei dem wir einen serverweiten "X-Frame-Options SAMEORIGIN" -Header auf dem hatten Quellserver verhindert, dass es auf unseren Testserver geladen wird.
Dies scheint nirgendwo dokumentiert zu sein, aber wenn Sie die Seiten bearbeiten können, die Sie iframe möchten (z. B. sind es Ihre eigenen Seiten), senden Sie einfach einen weiteren X-Frame-Options-Header mit einer beliebigen Zeichenfolge die Befehle SAMEORIGIN oder DENY.
z.B. für PHP setzen
Oben auf Ihrer Seite werden die Browser die beiden kombinieren, was zu einer Überschrift von führt
... und ermöglicht es Ihnen, die Seite in einen Iframe zu laden. Dies scheint zu funktionieren, wenn der ursprüngliche Befehl SAMEORIGIN auf Serverebene festgelegt wurde und Sie ihn seitenweise überschreiben möchten.
Alles Gute!
quelle
X-Frame-Options: SAMEORIGIN
gibt es keine Möglichkeit, dies innerhalb des Frames zu tun. Sie müssen ein Popup verwenden.header_remove
Funktion zu verwenden, sofern Sie sie zur Verfügung haben (> = 5.3.0).Header always unset X-Frame-Options
GOFORIT
(oder ein anderes zufälliges willkürliches ungültiges Token) verletzt absichtlich eine Sicherheitsmaßnahme, die von einem Server angewendet wird; Wenn Sie selbst die Kontrolle über den Server haben (was Sie für einen echten öffentlichen Dienst tun sollten), müssen Sie nur den Server so einstellen, dass der Header nicht an erster Stelle gesetzt wird.Wenn Sie diesen Fehler für ein YouTube-Video erhalten, verwenden Sie die eingebettete URL aus den Freigabeoptionen, anstatt die vollständige URL zu verwenden. Es wird so aussehen
http://www.youtube.com/embed/eCfDxZxTBW4
Sie können ersetzen auch
watch?v=
mitembed/
sohttp://www.youtube.com/watch?v=eCfDxZxTBW4
wirdhttp://www.youtube.com/embed/eCfDxZxTBW4
quelle
Wenn beim Versuch, eine Google Map in eine einzubetten, diese Fehlermeldung angezeigt wird
iframe
, müssen Sie sie dem Quelllink hinzufügen&output=embed
.quelle
&output=embed
UPDATE 2019: Sie können
X-Frame-Options
ein<iframe>
nur clientseitiges JavaScript und meine X-Frame-Bypass-Webkomponente umgehen . Hier ist eine Demo: Hacker News in einemX-Frame-Bypass
. (Getestet in Chrome & Firefox.)quelle
Hinzufügen von a
Zu meinem Link auf der Facebook-Registerkarte wurde das Problem für mich behoben ...
quelle
Es gibt ein Plugin für Chrome, das diesen Header-Eintrag löscht (nur für den persönlichen Gebrauch):
https://chrome.google.com/webstore/detail/ignore-x-frame-headers/gleekbfjekiniecknbkamfmkohkpodhe/reviews
quelle
Wenn beim Versuch, Vimeo-Inhalte einzubetten, dieser Fehler auftritt, ändern Sie den Quellcode des Iframes
von: https://vimeo.com/63534746
in: http://player.vimeo.com/video/63534746
quelle
Ich hatte das gleiche Problem, als ich versuchte, Moodle 2 in Iframe einzubetten. Lösung ist
Site administration ► Security ► HTTP security
und überprüfenAllow frame embedding
quelle
Das ist die Lösung Jungs !!
Das einzige, was für Facebook-Apps funktioniert hat!
quelle
Es scheint, dass X-Frame-Options Allow-From https: // ... abgeschrieben wird und ersetzt wurde (und ignoriert wird), wenn Sie stattdessen den Header Content-Security-Policy verwenden.
Hier ist die vollständige Referenz: https://content-security-policy.com/
quelle
Lösung zum Laden einer externen Website in einen iFrame, selbst wenn die Option x-frame auf der externen Website verweigert wird.
Wenn Sie eine andere Website in einen iFrame laden möchten und die
Display forbidden by X-Frame-Options”
Fehlermeldung angezeigt wird , können Sie dies tatsächlich beheben, indem Sie ein serverseitiges Proxy-Skript erstellen.Das
src
Attribut des iFrame könnte eine URL haben, die folgendermaßen aussieht:/proxy.php?url=https://www.example.com/page&key=somekey
Dann würde proxy.php ungefähr so aussehen:
Dies umgeht den Block, da es sich nur um eine GET-Anforderung handelt, die genauso gut ein gewöhnlicher Besuch einer Browserseite gewesen sein könnte.
Beachten Sie: Möglicherweise möchten Sie die Sicherheit in diesem Skript verbessern. Weil Hacker über Ihr Proxy-Skript auf Webseiten geladen werden könnten.
quelle
Ich habe fast alle Vorschläge ausprobiert. Das einzige, was das Problem wirklich löste, war:
Erstellen Sie eine
.htaccess
in demselben Ordner, in dem sich Ihre PHP-Datei befindet.Fügen Sie diese Zeile zum htaccess hinzu:
Header always unset X-Frame-Options
Das Einbetten des PHP durch einen Iframe aus einer anderen Domäne sollte danach funktionieren.
Zusätzlich können Sie am Anfang Ihrer PHP-Datei Folgendes hinzufügen:
Was in meinem Fall jedoch nicht notwendig war.
quelle
Ich hatte das gleiche Problem mit mediawiki, weil der Server aus Sicherheitsgründen das Einbetten der Seite in einen Iframe verweigerte.
Ich habe es schriftlich gelöst
in die mediawiki php config datei.
Ich hoffe es hilft.
quelle
FWIW:
Wir hatten eine Situation, in der wir unsere töten mussten,
iFrame
als dieser "Breaker" -Code auftauchte. Also habe ich PHP verwendetfunction get_headers($url);
, um die Remote-URL zu überprüfen, bevor ich sie in einem anzeigeiFrame
. Für eine bessere Leistung habe ich die Ergebnisse in einer Datei zwischengespeichert, sodass ich nicht jedes Mal eine HTTP-Verbindung herstellte.quelle
Ich habe Tomcat 8.0.30 verwendet, keiner der Vorschläge hat für mich funktioniert. Da wir das aktualisieren
X-Frame-Options
und auf einstellenALLOW
möchten, habe ich Folgendes so konfiguriert, dass eingebettete Iframes zugelassen werden:quelle
Die einzige Frage, die eine Reihe von Antworten hat. Willkommen bei dem Leitfaden, den ich mir gewünscht habe, als ich mich darum bemüht habe, dass er am Stichtag um 10:30 Uhr nachts funktioniert ... FB macht einige seltsame Dinge mit Canvas-Apps, und nun, Sie wurden gewarnt. Wenn Sie noch hier sind und eine Rails-App haben, die hinter einem Facebook-Canvas angezeigt wird, benötigen Sie:
Gemfile:
config / facebook.yml
config / application.rb
config / initializers / omniauth.rb
application_controller.rb
Sie benötigen einen Controller, um über die Canvas-Einstellungen von Facebook aufzurufen. Ich
/canvas/
habe die RouteSiteController
für diese App als Hauptroute verwendet :login.html.erb
Quellen
quelle
target = '_ parent'
Mit Kevin Vellas Idee habe ich versucht, dieses Attribut hinzuzufügen, um Elemente zu bilden, die mit dem PayPal-Schaltflächengenerator erstellt wurden. Hat für mich funktioniert, damit Paypal nicht in einem neuen Browserfenster / Tab geöffnet wird.
quelle
Ich bin mir nicht sicher, wie relevant es ist, aber ich habe eine Lösung dafür gefunden. Auf meiner Site wollte ich einen Link in einem modalen Fenster anzeigen, das einen Iframe enthält, der die URL lädt.
Ich habe das Klickereignis des Links mit dieser Javascript-Funktion verknüpft. Dies erfordert lediglich eine Anforderung an eine PHP-Datei, die die URL-Header auf X-FRAME-Optionen überprüft, bevor entschieden wird, ob die URL im modalen Fenster geladen oder umgeleitet werden soll.
Hier ist die Funktion:
Hier ist der PHP-Dateicode, der danach sucht:
Hoffe das hilft.
quelle
Ich bin auf dieses Problem gestoßen, als ich eine WordPress-Website betrieben habe. Ich habe alle möglichen Dinge versucht, um das Problem zu beheben, und war mir nicht sicher, wie. Letztendlich lag das Problem daran, dass ich die DNS-Weiterleitung mit Maskierung verwendete und die Links zu externen Websites nicht richtig angesprochen wurden. Das heißt, meine Website wurde unter http: //123.456.789/index.html gehostet, aber für die Ausführung unter http://somewebSite.com/index.html maskiert . Als ich im Browser http: //123.456.789/index.html eingab und auf dieselben Links klickte, gab es keine Probleme mit X-Frame-Ursprüngen in der JS-Konsole, aber die Ausführung von http://somewebSite.com/index.htmltat. Um richtig zu maskieren, müssen Sie die DNS-Nameserver Ihres Hosts zu Ihrem Domänendienst hinzufügen, dh godaddy.com sollte Nameserver haben, z. B. ns1.digitalocean.com, ns2.digitalocean.com, ns3.digitalocean.com, falls Sie dies waren Verwenden von digitalocean.com als Hosting-Service.
quelle
remove_action( 'admin_init', 'send_frame_options_header',10);
Es ist überraschend, dass hier niemand
Apache
die Servereinstellungen (*.conf
Dateien) oder die.htaccess
Datei selbst als Ursache für diesen Fehler erwähnt hat. Durchsuchen Sie Ihre.htaccess
oderApache
Konfigurationsdateien und stellen Sie sicher, dass Sie nicht Folgendes eingestellt habenDENY
:Header always set X-Frame-Options DENY
Wenn Sie es ändern
SAMEORIGIN
, funktionieren die Dinge wie erwartet:Header always set X-Frame-Options SAMEORIGIN
quelle
Die einzige wirkliche Antwort, wenn Sie die Header Ihrer Quelle, die Sie in Ihrem Iframe haben möchten, nicht kontrollieren, besteht darin, sie zu vertreten. Lassen Sie einen Server als Client fungieren, die Quelle empfangen, die problematischen Header entfernen, bei Bedarf CORS hinzufügen und dann Ihren eigenen Server anpingen.
Es gibt noch eine andere Antwort, die erklärt, wie man einen solchen Proxy schreibt. Es ist nicht schwierig, aber ich war mir sicher, dass jemand dies vorher getan haben musste. Es war aus irgendeinem Grund nur schwer zu finden.
Ich habe endlich einige Quellen gefunden:
https://github.com/Rob--W/cors-anywhere/#documentation
^ bevorzugt. Wenn Sie eine seltene Verwendung benötigen, können Sie einfach seine Heroku-App verwenden. Andernfalls ist es Code, um es selbst auf Ihrem eigenen Server auszuführen. Beachten Sie die Grenzwerte.
Whateverorigin.org
^ zweite Wahl, aber ziemlich alt. angeblich neuere Wahl in Python: https://github.com/Eiledon/alloworigin
dann gibt es die dritte Wahl:
http://anyorigin.com/
Das scheint eine kleine kostenlose Nutzung zu erlauben, bringt Sie aber auf eine öffentliche Schamliste, wenn Sie nicht zahlen und einen nicht festgelegten Betrag verwenden, von dem Sie nur entfernt werden können, wenn Sie die Gebühr zahlen ...
quelle
Nicht erwähnt, kann aber in einigen Fällen helfen:
quelle
Verwenden Sie diese unten angegebene Zeile anstelle der
header()
Funktion.quelle
Ich hatte dieses Problem und löste es durch Bearbeiten von httd.conf
Ich habe SAMEORIGIN in GOFORIT geändert und den Server neu gestartet
quelle
Versuchen Sie dieses Ding, ich glaube nicht, dass jemand dies im Thema vorgeschlagen hat, dies wird wie 70% Ihres Problems lösen, für einige andere Seiten müssen Sie verschrotten, ich habe die vollständige Lösung, aber nicht für die Öffentlichkeit,
Fügen Sie unten zu Ihrem Iframe hinzu
sandbox = "erlaube-gleichen-Ursprungs-erlaubten-Skripten erlaube-Popups erlaube-Formulare"
quelle
Bearbeiten Sie .htaccess, wenn Sie X-Frame-Optionen aus einem gesamten Verzeichnis entfernen möchten.
Und füge die Zeile hinzu: Header deaktiviert immer X-Frame-Optionen
[Inhalt von: Überwindung von "Anzeige durch X-Frame-Optionen verboten"
quelle