質問
PHPを使用して、いくつかのサイトからIFRAMEとしてアクセスされる小さなWebページを作成しています。このサイトへのアクセスを「承認済み」内でのみ動作するように制限したい他のサイトや直接アクセスされないサイト。誰か提案はありますか?これも可能ですか? PHPサイトはApacheになり、コンテンツをiframingするサイトはおそらく.NETになります。
明確にするために、承認されたサイト内でiframeされている限り、どのサイトでもページを表示できます。人々が直接アクセスするのをブロックしたい。クッキーは解決策かもしれないと思っていますが、よくわかりません。
解決 7
すべての素晴らしいアイデアに感謝します!解決策は、承認された「iframing」によって設定されたセッションCookieであると思います。サイト。本当に決心した人はまだコンテンツを取得できますが、まともな「秘密」を考え出すことで、ほとんどの悪用を防ぐことができると思います。ある種の共有シークレットに基づくアルゴリズムを両方の側で使用し、承認されたサイトにセッションCookieを設定させて、それをPHPサイトが読み取るようにします。 Cookieが有効で、基準を満たしている場合、コンテンツを表示します。それ以外の場合は表示しません。私が保護している情報はミッションクリティカルなものではなく、悪用されないようにしています。
他のヒント
残念ながらこれは不可能です。
Javascriptを使用すると、ページが別のフレームに埋め込まれているかどうかを確認できますが、一部の人々のブラウザーではJavascriptをオフにできるため、これは絶対確実ではありません。
たとえば、次のjavascriptを実行してページの親を変更することができます:
if (top.location != location) {
top.location.href = document.location.href ;
}
これについて考える...これは完全に安全であるとは確信していませんが、これについてさらに考えている間はこちらです-
これを行う唯一の方法は、埋め込まれるサイトを制御する場合です。それらを制御する場合、暗号化された時間をフレームセットからフレームに渡すことができます:
<iframe src="http://yourdomain/frame.php?key=p21n9u234p8yfb8yfy234m3lunflb8hv" />
frame.phpは、メッセージを解読して、小さなデルタ内の時間(10秒など)を見つけます。 frame.phpは、受け入れ可能なサイトのみが時間を暗号化できたと知っているので、自分自身を表示してもよいことを知っています。それ以外の場合は、何も出力しません。
javascriptであろうとHTTP_REFERであろうと、それ以外のものはなりすまし、無効化、または回避されます。
そして実際、そのURLを使用すると、ユーザーが10秒以内にロードする限り、攻撃者はフレームをどこにでも表示できます。そのため、攻撃者は受け入れられたサイトをスクレイプし、キーを取得するだけです。その脅威モデルが受け入れられない場合、実際にできることは何もありません(さらに複雑なプロトコルを除く)。
GoogleがAdSenseを実装するのと同じ方法でこれを実装します。サイトにiframeコードを埋め込む代わりに、アカウント番号を含むJavaScriptを埋め込みます:
<script type="text/javascript"><!--
myiframe_client = "12345";
myiframe_width = 728;
myiframe_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://www.example.com/scripts/show_iframe.js">
</script>
少なくともこの方法では、アカウントごとにiframeコンテンツを表示するユーザーを管理できます。誰かが不正にiframeを使用しようとした場合、アカウントを無効にできます。また、ブラウザのセキュリティ制限内でjavascriptを使用してドキュメントのプロパティを調べて、不正アクセスを防止することもできます。
ここでは、画面のスクレイピングが解決策になる可能性があります。
承認済みサイトのWebサーバーからのリクエストのみを受け入れるようにサイトのアクセスリストを設定し、それらにセキュリティトークンを発行します。それは簡単な部分です。
開発チームは、コンテンツを取得してユーザーに表示するために、リレーサーブレットをセットアップする必要があります(関連するURLを書き換えた後)。
これはかなり複雑になる可能性がありますが、サイトにアクセスするユーザーをより適切に制御できます。さらに、発行するセキュリティトークンは2つのWebサーバー間でのみ送信されるため、Webユーザーには表示されません。
秘密のソルト+日付を使用してクライアントIPをMD5(またはセキュリティを強化するために暗号化)し、これをiframe src urlのパラメーターとして渡すことができます。 iframeで同じことを行い、結果がパラメーターと同じかどうかを確認します。そうでない場合、アクセスを拒否します
$ _ SERVER ['HTTP_REFERER']
をチェックして、特定の文字列が含まれていることを確認しませんか?
if (strpos('http://example.com', $ _ SERVER ['HTTP_REFERER']
をチェックして、特定の文字列が含まれていることを確認しませんか?
<*>
最初にアドレスを解析してから、 in_array()
かどうかを確認します。
これは誰もがリファラーを偽造できるため、絶対確実ではありません。キーが使用されている場合、ノーゴー。
SERVER['HTTP_REFERER']) !== false) {
// allowed
}
最初にアドレスを解析してから、 in_array()
かどうかを確認します。
これは誰もがリファラーを偽造できるため、絶対確実ではありません。キーが使用されている場合、ノーゴー。