- ベストアンサー
iframeからのアクセスか、ブラウザでの直アクセスか判別したいです。
iframeからのアクセスか、ブラウザでの直アクセスか判別したいです。 インラインフレームで表示するコンテンツがあります。 そのインラインフレームで読み込んでいるURLに直接ブラウザからアクセスされた場合はエラーとしたいです。 判別する方法はありますでしょうか。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
$_SERVER["HTTP_REFERER"]に参照元が設定されているので 設定されていない、もしくは想定されていない参照元であった場合 エラー画面に飛ばすようにしてみたらどうでしょうか? ただし、単純にブラウザにアドレスを入れて表示とかなら防げますが 参照元は偽装可能ですので厳密に他からアクセスをさせないなどという場合には向いてません。
その他の回答 (2)
- tenderfeel
- ベストアンサー率56% (215/379)
srcで指定するときに適当なパラメーターを渡して <iframe src="hoge.html?frame=true"></iframe> 呼び出されるページ内でそのパラメーターが受け取れるかテストする ○JavaScript location.search.match("frame=true") location.search.indexOf("frame=true") ○PHP isset($_GET["frame"]) && $_GET["frame"]==true パラメーターを直接入力されたら判別できないですが、 表向きは何も出ないので割と有効なんじゃないかと思います。
お礼
ありがとうございます! この方法は、僕も最初に考え実装していました。 しかし、この方法だとフレーム内で右クリック→プロパティを見る事で パラメーター付きURLがフルで表示されてしまって… しかし、2番目の方の回答を参考に リファラーのURLからスプリットしてパラメーターを取る方式に変えました。 すると、フレームで指定するURLにはパラメーターを付けなくてよいので 当然、プロパティで表示されるURLはパラメーター無しのURLになります。 回答を参考に、現状は下記の対策を実装しました。 1、リファラーが取れたかのチェック 2、リファラーのURLが指定ドメインを含んでいるかチェック 3、リファラーをスプリットしてパラメーター類を取得し照合 そして、1番目の方のJavaScriptを+α といった感じで、NGの場合はTOPにリダイレクトさせました。 これで、前よりはだいぶマシになりました! 知識がある人には突破されてしまうの難点ですが…
- yambejp
- ベストアンサー率51% (3827/7415)
>直接ブラウザからアクセスされた場合はエラー 第一にiframeが必須という時点でどうかと思いますが PHPで判断することはかなり難しいのでjavascriptなどでやるしかないかも (まあ回避策はいくらでもあるのですが) iframeで呼び出すソースにこんな風に書いておく・・・ <script> if(window==top.window) location.href="トップページ"; </script> セッションやクッキーをからめればできないこともないかもしれませんが メリットがほとんどない処理なので、あまりお勧めしません
お礼
ありがとうございます! 早々実装させていただきました!
お礼
なるほど! リファラーがインラインフレームを開いているURLか見ればいいんですね! たしかに、偽装されたら… って思いましたけど、この回答でいいアイディアが浮かびました! インラインフレームで読むURLにGETパラメータを添加してるんですが そこには書かずにリファラーのURL内からスプリットしてパラメータを取ろうと思います。 リファラーとパラメータの照合 これでだいぶマシになりそうです!