Warum Iframe bei yahoo.com nicht funktioniert

Lesezeit: 3 Minuten

Benutzer-Avatar
Sayakiss

Ich finde das geht nicht:

<iframe src="http://www.yahoo.com"> </iframe>

Ich habe diese Frage gelesen, aber ich verstehe nicht, was sie mit hinzufügen meinen:

<?php
header('X-Frame-Options: GOFORIT'); 
?>

Ich habe versucht, dies oben in meine HTML-Datei einzufügen (natürlich in eine PHP-Datei ändern), und meine PHP-Datei wurde:

<?php
header('X-Frame-Options: GOFORIT'); 
?>
<iframe src="http://www.yahoo.com"> </iframe>

Ich führe es in meinem Appserv (mit PHP 5.2.6) aus und es funktioniert nicht. Kann mir jemand erklären, was ich genau tun muss, um das zu überwinden?

Sie haben Pech: yahoo.com erlaubt Ihnen nicht, ihre Website in einen Iframe einzubetten. Auch Facebook oder andere beliebte Websites nicht.

Der Grund für diese Einschränkung ist Clickjacking.

Sie können dies überprüfen, indem Sie die Antwortheader von ihrer Website überprüfen; sie spezifizieren X-Frame-Options:SAMEORIGIN Das bedeutet, dass nur yahoo.com yahoo.com-Seiten einbetten kann.

Einige ältere Browser erzwingen den Header nicht, aber alle neuen werden es tun. Afaik, es gibt keinen einfachen Weg daran vorbei.

Die einzige Lösung, die mir einfällt, ist die Implementierung eines Proxy-Skripts, dh Sie betten ein Skript ein, das auf Ihrem Server lebt und den Remote-Inhalt für Sie abruft.

Z.B. Ihr Iframe ruft “/my-proxy.php?url=http://www.yahoo.com/” und dieses Skript würde so aussehen:

<?php

header('X-Frame-Options: SAMEORIGIN'); // don't allow other sites to use my proxy
echo file_get_contents($_GET['url']);

Ihr Kilometerstand kann variieren…

  • scheinen funktioniert! Ich werde es weiter testen … Wenn beim folgenden Test kein Problem auftritt, erhalten Sie, wie versprochen, 200 Reputation

    – Sayakiss

    18. Mai 2013 um 14:17 Uhr


  • coursera.org wird über HTTPS bereitgestellt. Wahrscheinlich müssen Sie nur die aktivieren/installieren php_openssl Erweiterung damit es funktioniert.

    – jmlnik

    18. Mai 2013 um 14:32 Uhr

  • Stackoverflow verwendet Javascript, um das Einbetten von Iframes zu verhindern. Fyi, das ist nicht eine gute Lösung. Die gute Lösung besteht darin, Iframes ganz zu vermeiden: ux.stackexchange.com/questions/4934/…

    – jmlnik

    18. Mai 2013 um 14:40 Uhr

  • Es gibt verschiedene Möglichkeiten für Websites, Iframes zu verhindern. Einige verwenden Header (wie Yahoo) und andere Javascript (wie Stackoverflow). Obwohl es Möglichkeiten gibt, diese zu umgehen, indem Sie Proxys verwenden und den Code mit regulären Ausdrücken umschreiben, ist dies eine schrecklich schlechte Praxis. Als triviales Beispiel ist meine Proxy-Lösung gut genug, aber das war es auch schon. Tut mir leid, dass es keine bessere Lösung für Sie gibt. Fühlen Sie sich frei, eine neue/spezifischere Frage zu eröffnen.

    – jmlnik

    18. Mai 2013 um 15:16 Uhr

Sie haben Probleme mit der ursprungsübergreifenden Ressourcenfreigabe. Lese das Wikipedia CORS und MDN CORS Artikel.

Was Ihren Ausschnitt betrifft,

<?php
  header('X-Frame-Options: GOFORIT'); 
?>

hinzugefügt werden muss zu der Seite, die bedient wird und nicht auf die Seite/den Code, der es anfordert, was in diesem Fall wäre yahoo.com. Aber wie Sie nicht dienen yahoo.com selbst, es gibt keine Möglichkeit, es hinzuzufügen.

Jedoch wenn die Frage sich auf Ihre eigenen Seiten bezog und yahoo.com war nur ein Beispiel, Sie können einfach die richtigen HTTP-Header wie in den Artikeln angegeben festlegen, und Sie wären gut.

Einige Websites wie Google, Yahoo haben die iFrame-Einbettung für ihre Website deaktiviert. Wenn Sie das tun möchten, holen Sie sich ihr HTML mit curl oder file_get_conents auf der Serverseite und zeigen Sie es an.

Überprüfen Sie den HTTP-Antwortheader X-Frame-Option. Ich denke, für Yahoo sollte es deny oder sameorigin sein, was bedeutet, dass nur die Seite von Yahoo ihre anderen Seiten in Iframe einbetten kann

Hinzufügen ‘X-Frame-Header ignorieren‘ plugin in google chorme dann funktioniert es einwandfrei.

1005780cookie-checkWarum Iframe bei yahoo.com nicht funktioniert

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy