3

これが機能しないことがわかりました:

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

この質問を読みましたが、追加の意味がわかりません:

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

これをhtmlファイルの先頭に追加しようとしました(もちろんphpファイルに変更してください)、phpファイルは次のようになりました。

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

appserv (php 5.2.6) で実行しましたが、動作しません。これを克服するために正確に何をすべきか誰か説明できますか?

4

4 に答える 4

5

残念ながら、yahoo.com ではサイトを iframe に埋め込むことは許可されていません。Facebookやその他の人気サイトもそうではありません。

この制限の理由はクリックジャッキングです。

これは、サイトの応答ヘッダーを確認することで確認できます。彼らX-Frame-Options:SAMEORIGINは、yahoo.com だけが yahoo.com ページを埋め込むことができることを意味します。

一部の古いブラウザーはヘッダーを強制しませんが、新しいブラウザーはすべて強制します。Afaik、それを回避する簡単な方法はありません。

私が考えることができる唯一の解決策は、プロキシ スクリプトを実装することです。つまり、リモート コンテンツをフェッチするスクリプトをサーバーに埋め込むことです。

例えば。あなたのiframeは「/my-proxy.php?url= http://www.yahoo.com/」を呼び出し、そのスクリプトは次のようになります:

<?php

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

あなたのマイレージは異なる場合があります...

于 2013-05-18T13:58:36.460 に答える
2

クロスオリジン リソース共有に問題があります。これらのウィキペディアの CORSおよびMDN CORSの記事を読んでください。

あなたのスニペットに関しては、

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

は、それを要求するページ/コードではなく、提供されるページに追加する必要があります。この場合、yahoo.com. しかし、あなたはyahoo.com自分自身に奉仕しないので、それを追加する方法はありません.

ただし、質問が自分のページに関するものでありyahoo.com、単なる例である場合は、記事で指定されているように正しい HTTP ヘッダーを設定するだけで問題ありません。

于 2013-05-18T13:53:31.877 に答える