4

重複の可能性:
外部サイトからの iframe の表示を特定のドメインのみに制限する方法

欲しいものはシンプルです。承認していないドメインから自分の Web サイトが呼び出されないようにしたい。a.com と b.com だけが、私の Web アプリケーション wwww.mydomain.com/myapp.php を呼び出す iframe を持つページを持つことができるとしましょう。どうすればこれを達成できますか?

1つ目は、iframeの親のドメインをチェックするWebアプリケーションについて考えていました。おそらくそれは可能ですが、クロスドメインの制限があるため、確かに簡単ではありません.

2 つ目は、a.com と b.com の要求ページで最初に小さな PHP スクリプトを実行して、ファイルまたはデータベースに情報を書き込むことを考えていたので、要求ページが承認済みドメインの 1 つにあることがわかりました。問題は、スクリプトを呼び出す方法と実行するタイミングです。

src 属性を持つ script タグまたは image タグを配置することは良い考えですか? それは私にはかなり単純な解決策のように見え、PHP は必要ありません。要求ページは純粋な HTML にすることができます。

次のようになります。

<img src="http://wwww.mydomain.com/myapp.php" style="width: 0px; height: 0px;" alt="Not an image"  title="Not an image"/>

何をアドバイスしますか?

4

4 に答える 4

5

これが私がやった方法で、魅力のように機能します。平均的なユーザーは、私の Web アプリケーションにアクセスできません。

承認済みドメインでは何もする必要はありません。甘い!

dda と jackJoe に感謝 (外部サイトからの iframe の表示を特定のドメインのみに制限する方法)

<?php

  define('MSG_NO_ACCESS', 'No access');

  $acceptedDomains = array('mydomain.com', 'a.com', 'b.com');
  $referer=get_domain($_SERVER['HTTP_REFERER']);

  if(!$referer || !in_array($referer,$acceptedDomains))
  {
     header('HTTP/1.0 403 Forbidden');
     exit(MSG_NO_ACCESS);
  }

function get_domain($url)
{
  $pieces = parse_url($url);
  $domain = isset($pieces['host']) ? $pieces['host'] : '';
  if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) 
  {
     return $regs['domain'];
  }
  return false;
}

?>

于 2012-05-19T09:02:06.207 に答える
2

この質問はすでに尋ねられています。 外部サイトからの iframe の表示を特定のドメインのみに制限する方法

基本的にはできますが、Web サーバーによっては、アクセスを制限する必要があります。

Apache では、これは .htaccess ファイルで実行できます。

IIS では、「IP アドレスとドメインの制限」でこれを行うことができます。

共有ホスティング プラットフォームを使用している場合は、それほど制御できない可能性があります。

于 2012-05-18T16:03:57.917 に答える
1

いくつかの JS を注入する小さな PHP は、長い道のりを歩むことができます。

<?php
if(array_key_exists('HTTP_REFERER',$_SERVER)){
  $referer=$_SERVER['HTTP_REFERER'];
} else {
  $referer='';
}
echo "<script type='text/javascript'>
var referer='".$referer."';
</script>
";
?>

これにより、HTTP_REFERER が「リファラー」JS 変数に挿入されます。これと次の JS コードがあれば、準備完了です。

if (top === self) {
// not in a frame, no worries
} else {
// in a frame, decide whether referer is one of the guys allowed to display your web site...
// nuke the content, redirect, display a goatsee pic, etc
}
于 2012-05-18T16:22:51.223 に答える
0

これを防ぐためにできることは何もありません。サーバー プロキシを持っている人なら誰でも、あなたの HTML を取得して、自分の HTML として再提供できます。

ルール 1: インターネット上で自分の情報を他人に盗まれたくない場合は、オンラインに公開しないでください。

于 2012-05-18T15:45:22.747 に答える