【3月6日実施】システムメンテナンス実施のお知らせ

iframeからのアクセスか、ブラウザでの直アクセスか判別したいです。


インラインフレームで表示するコンテンツがあります。


そのインラインフレームで読み込んでいるURLに直接ブラウザからアクセスされた場合はエラーとしたいです。


判別する方法はありますでしょうか。


宜しくお願い致します。

A 回答 (3件)

$_SERVER["HTTP_REFERER"]に参照元が設定されているので


設定されていない、もしくは想定されていない参照元であった場合
エラー画面に飛ばすようにしてみたらどうでしょうか?

ただし、単純にブラウザにアドレスを入れて表示とかなら防げますが
参照元は偽装可能ですので厳密に他からアクセスをさせないなどという場合には向いてません。
    • good
    • 0
この回答へのお礼

なるほど!

リファラーがインラインフレームを開いているURLか見ればいいんですね!

たしかに、偽装されたら…

って思いましたけど、この回答でいいアイディアが浮かびました!

インラインフレームで読むURLにGETパラメータを添加してるんですが

そこには書かずにリファラーのURL内からスプリットしてパラメータを取ろうと思います。

リファラーとパラメータの照合

これでだいぶマシになりそうです!

お礼日時:2010/09/03 16:56

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


パラメーターを直接入力されたら判別できないですが、
表向きは何も出ないので割と有効なんじゃないかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます!

この方法は、僕も最初に考え実装していました。

しかし、この方法だとフレーム内で右クリック→プロパティを見る事で
パラメーター付きURLがフルで表示されてしまって…


しかし、2番目の方の回答を参考に
リファラーのURLからスプリットしてパラメーターを取る方式に変えました。

すると、フレームで指定するURLにはパラメーターを付けなくてよいので
当然、プロパティで表示されるURLはパラメーター無しのURLになります。

回答を参考に、現状は下記の対策を実装しました。

1、リファラーが取れたかのチェック
2、リファラーのURLが指定ドメインを含んでいるかチェック
3、リファラーをスプリットしてパラメーター類を取得し照合

そして、1番目の方のJavaScriptを+α

といった感じで、NGの場合はTOPにリダイレクトさせました。

これで、前よりはだいぶマシになりました!

知識がある人には突破されてしまうの難点ですが…

お礼日時:2010/09/07 19:22

>直接ブラウザからアクセスされた場合はエラー



第一にiframeが必須という時点でどうかと思いますが
PHPで判断することはかなり難しいのでjavascriptなどでやるしかないかも
(まあ回避策はいくらでもあるのですが)

iframeで呼び出すソースにこんな風に書いておく・・・
<script>
if(window==top.window) location.href="トップページ";
</script>

セッションやクッキーをからめればできないこともないかもしれませんが
メリットがほとんどない処理なので、あまりお勧めしません
    • good
    • 0
この回答へのお礼

ありがとうございます!

早々実装させていただきました!

お礼日時:2010/09/07 18:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!