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.
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.
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
und self
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:
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.
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 .
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.
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.
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>