So verhindern Sie, dass meine Site-Seite über den Site-Frame eines Drittanbieters von iFrame geladen wird
80
Wie kann ich feststellen, dass meine Seite beim Laden der Seite als Frame in eine andere Site eingebettet ist? Ich denke, Referrer Request Header kann mir hier nicht helfen? Vielen Dank.
Hallo John, ich kann nicht sagen, dass ich hier eine vollständige Lösung brauche. Nur die Bewegungsrichtung reicht aus. Nachdem ich eine Antwort auf meine Frage gefunden habe, poste ich sie immer als Antwort. Nur so kann ich an der Community teilnehmen.
oben
Hinweis: Das Festlegen des Meta-Tags ist nutzlos! Zum Beispiel hat <meta http-equiv = "X-Frame-Options" content = "leugnen"> keine Auswirkung. Benutze es nicht! Nur wenn Sie den HTTP-Header wie in den folgenden Beispielen verwenden, funktionieren die X-Frame-Optionen. developer.mozilla.org/fr/docs/Web/HTTP/Headers/X-Frame-Options
Hosam Elzagh
Antworten:
100
Sie können es nicht von der Serverseite aus überprüfen, aber Sie können Javascript verwenden, um es zu erkennen, nachdem die Seite geladen wurde. Vergleichen Sie topund selfwenn sie nicht identisch sind, befinden Sie sich in einem Frame.
Darüber hinaus respektieren einige moderne Browser den X-FRAME-OPTIONSHeader, der zwei Werte haben kann:
VERWEIGERN - verhindert, dass die Seite gerendert wird, wenn sie in einem Frame enthalten ist
SAMEORIGIN - wie oben, es sei denn, die Seite gehört zur selben Domain wie der Frameset-Inhaber der obersten Ebene.
Zu den Nutzern gehört Picasa von Google, das nicht in einen Frame eingebettet werden kann.
Browser, die den Header unterstützen, mit der Mindestversion:
Da ich hier über eine Google-Suche gestolpert bin, werde ich hinzufügen, dass Firefox im August 2010 X-FRAME-OPTIONS mit FF3.6.9 hinzugefügt hat: michael-coates.blogspot.com/2010/08/…
Dieser Ansatz ist besonders nützlich, wenn Sie eine Nachricht an die Person senden möchten, die Ihren Inhalt in einen Iframe stellt, oder an den Endbenutzer der Website, der Ihren Inhalt im Iframe betrachtet.
Kevinmicke
29
Für moderne Browser können Sie CSP (Content Security Policy) verwenden, einen Standard. Der folgende Header verhindert, dass das Dokument irgendwo in einen Frame geladen wird:
Content-Security-Policy: frame-ancestors 'none'
(IE 11 benötigt jedoch das X-Präfix). Sie können auch 'none'zu dem Ursprung wechseln , an dem Framing zulässig ist, z. B. zu Ihrer eigenen Site.
Ihre Antwort ist bei klarem Respekt nicht klar genug. Ist das Header-Code oder PHP? Zum Beispiel.
Gary Carlyle Cook
2
@GaryCarlyleCook Dies ist ein HTTP-Header, der Teil der Antwort an den Browser sein sollte, wenn eine Seite bereitgestellt wird. Es ist kein PHP-Code, obwohl Sie PHP verwenden könnten, um ihn zu senden. siehe header ()
rvighne
15
Sie können verhindern, dass Ihre Seite in einem Iframe mit Javascript geladen wird
sandboxDas Attribut on iframe erlaubt es, solche Framing-Hacks zu verbieten. Dieser Weg ist also kein sicherer Weg, um Framing zu verhindern, falls Sie Sicherheitsbedenken haben.
Frédéric
6
Oder Sie können eine bestimmte Domain blockieren, wenn Sie an einigen Orten nichts gegen Ihre Inhalte haben, diese aber nicht auf einer bestimmten Site haben möchten. Wenn Sie beispielsweise offendingdomain.comIhren Inhalt einbetten, können Sie Folgendes tun:
Dies würde den Speicherort des übergeordneten Dokuments überprüfen und feststellen, ob es der offendingdomain.comInhalt ist, der Ihren Inhalt einbettet. Dieses Skript sendet diesen Iframe dann zur Bestrafung an ein bestimmtes berühmtes Youtube-Video. Tatsächlich haben sie sich nur selbst gerollt.
Verwenden Sie Javascript, um zu überprüfen, ob es auf iframe geladen wurde, indem Sie das folgende Skript am Ende Ihrer PHP-Datei platzieren und zu einer Seite umleiten, die eine Warnung anzeigt oder darauf hinweist, dass Ihre Seite nicht mit iframe geladen werden sollte.
Antworten:
Sie können es nicht von der Serverseite aus überprüfen, aber Sie können Javascript verwenden, um es zu erkennen, nachdem die Seite geladen wurde. Vergleichen Sie
top
undself
wenn sie nicht identisch sind, befinden Sie sich in einem Frame.Darüber hinaus respektieren einige moderne Browser den
X-FRAME-OPTIONS
Header, der zwei Werte haben kann:Zu den Nutzern gehört Picasa von Google, das nicht in einen Frame eingebettet werden kann.
Browser, die den Header unterstützen, mit der Mindestversion:
quelle
Stackoverflow enthält einige JS zum Testen (
master.js
). Dies ist der relevante Teil davon:if(top!=self){ top.location.replace(document.location); alert("For security reasons, framing is not allowed; click OK to remove the frames.") }
Beachten Sie jedoch, dass JS deaktiviert werden kann.
quelle
Für moderne Browser können Sie CSP (Content Security Policy) verwenden, einen Standard. Der folgende Header verhindert, dass das Dokument irgendwo in einen Frame geladen wird:
Content-Security-Policy: frame-ancestors 'none'
(IE 11 benötigt jedoch das
X-
Präfix). Sie können auch'none'
zu dem Ursprung wechseln , an dem Framing zulässig ist, z. B. zu Ihrer eigenen Site.Um die älteren Browser abzudecken, wird dies am besten zusammen mit der Antwort von @ Maerlyn verwendet .
quelle
Sie können verhindern, dass Ihre Seite in einem Iframe mit Javascript geladen wird
<script type="text/javascript"> if ( window.self !== window.top ) { window.top.location.href=window.location.href; } </script>
Dieser Code ändert die Adresse des Containers des Iframes Ihrer Seite in Ihre Seitenadresse und erzwingt, dass der Container Ihre Seite anzeigt.
quelle
sandbox
Das Attribut on iframe erlaubt es, solche Framing-Hacks zu verbieten. Dieser Weg ist also kein sicherer Weg, um Framing zu verhindern, falls Sie Sicherheitsbedenken haben.Oder Sie können eine bestimmte Domain blockieren, wenn Sie an einigen Orten nichts gegen Ihre Inhalte haben, diese aber nicht auf einer bestimmten Site haben möchten. Wenn Sie beispielsweise
offendingdomain.com
Ihren Inhalt einbetten, können Sie Folgendes tun:<script type="text/javascript"> if(document.referrer.indexOf("offendingdomain.com") != -1) { window.location = "http://www.youtube.com/watch_popup?v=oHg5SJYRHA0"; } </script>
Dies würde den Speicherort des übergeordneten Dokuments überprüfen und feststellen, ob es der
offendingdomain.com
Inhalt ist, der Ihren Inhalt einbettet. Dieses Skript sendet diesen Iframe dann zur Bestrafung an ein bestimmtes berühmtes Youtube-Video. Tatsächlich haben sie sich nur selbst gerollt.quelle
Verwenden Sie Javascript, um zu überprüfen, ob es auf iframe geladen wurde, indem Sie das folgende Skript am Ende Ihrer PHP-Datei platzieren und zu einer Seite umleiten, die eine Warnung anzeigt oder darauf hinweist, dass Ihre Seite nicht mit iframe geladen werden sollte.
<script type="text/javascript"> if(top.location != window.location) { window.location = '/error_iframe.php'; } </script>
quelle