• ベストアンサー

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

iframeからのアクセスか、ブラウザでの直アクセスか判別したいです。 インラインフレームで表示するコンテンツがあります。 そのインラインフレームで読み込んでいるURLに直接ブラウザからアクセスされた場合はエラーとしたいです。 判別する方法はありますでしょうか。 宜しくお願い致します。

  • PHP
  • 回答数3
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • duron
  • ベストアンサー率77% (73/94)
回答No.2

$_SERVER["HTTP_REFERER"]に参照元が設定されているので 設定されていない、もしくは想定されていない参照元であった場合 エラー画面に飛ばすようにしてみたらどうでしょうか? ただし、単純にブラウザにアドレスを入れて表示とかなら防げますが 参照元は偽装可能ですので厳密に他からアクセスをさせないなどという場合には向いてません。

kzkz-16
質問者

お礼

なるほど! リファラーがインラインフレームを開いているURLか見ればいいんですね! たしかに、偽装されたら… って思いましたけど、この回答でいいアイディアが浮かびました! インラインフレームで読むURLにGETパラメータを添加してるんですが そこには書かずにリファラーのURL内からスプリットしてパラメータを取ろうと思います。 リファラーとパラメータの照合 これでだいぶマシになりそうです!

その他の回答 (2)

回答No.3

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 パラメーターを直接入力されたら判別できないですが、 表向きは何も出ないので割と有効なんじゃないかと思います。

kzkz-16
質問者

お礼

ありがとうございます! この方法は、僕も最初に考え実装していました。 しかし、この方法だとフレーム内で右クリック→プロパティを見る事で パラメーター付きURLがフルで表示されてしまって… しかし、2番目の方の回答を参考に リファラーのURLからスプリットしてパラメーターを取る方式に変えました。 すると、フレームで指定するURLにはパラメーターを付けなくてよいので 当然、プロパティで表示されるURLはパラメーター無しのURLになります。 回答を参考に、現状は下記の対策を実装しました。 1、リファラーが取れたかのチェック 2、リファラーのURLが指定ドメインを含んでいるかチェック 3、リファラーをスプリットしてパラメーター類を取得し照合 そして、1番目の方のJavaScriptを+α といった感じで、NGの場合はTOPにリダイレクトさせました。 これで、前よりはだいぶマシになりました! 知識がある人には突破されてしまうの難点ですが…

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>直接ブラウザからアクセスされた場合はエラー 第一にiframeが必須という時点でどうかと思いますが PHPで判断することはかなり難しいのでjavascriptなどでやるしかないかも (まあ回避策はいくらでもあるのですが) iframeで呼び出すソースにこんな風に書いておく・・・ <script> if(window==top.window) location.href="トップページ"; </script> セッションやクッキーをからめればできないこともないかもしれませんが メリットがほとんどない処理なので、あまりお勧めしません

kzkz-16
質問者

お礼

ありがとうございます! 早々実装させていただきました!

関連するQ&A

  • iframeで開かれた時だけredirect

    質問させてください。 自分のサイトの特定のページが<iframe>によって開かれた場合のみ 別のページヘredirectをさせる事は可能でしょうか? この場合アクセスが有った瞬間にiframeかブラウザによるアクセスか 判別しないといけないと思うのですがそういった判別方法は存在するのでしょうか? どなたかご教示いただけましたら幸いです。

  • iframe内から外のjavascriptを動かす

    cgiを使ってiframe内にコンテンツを表示させていて、 iframe内にどれを表示するかはiframe外のjavascriptで操作しています。 他のページからこのページへアクセスしたときに、 どのiframeを表示するか指定したいのですが、どのようにすればいいのでしょうか? ちなみにcgiはmovabletypeを使っています。 できれば、iframeにアクセスした際に、iframe外も自動で表示されるようにしたいです。 (iframeのアドレスにアクセスするとコンテンツがページの真ん中にポツンと表示されてしまうので) まだ本当に始めたばかり初心者なので、右も左もわからないのですが どうぞよろしくお願いいたします。

  • 携帯サイトでの、URL直打アクセス拒否について

    携帯サイトを作成しているのですが、セッションを用いた 会員ごとのページで、URL直打でアクセスされた場合は loginページにリダイレクトする等を行った方がよいのでしょうか? またその場合の対処方法について教えてください。 なにをもって判断するか。hiddenでname=login value=true等してもうまくいきません。 session.gc_maxlifetime 1440 なので、24分後には、直打アクセスはできなくなるのでしょうか? login.php 認証にはPear Authを利用。 $idは各会員ごとの固有のIDです。これで、会員ごとのページを表示します。 if ($authobj->getAuth()){ header("Location: contents.php?id=$id".SID); }else{ print("認証されていません"); } ↓例えばこのようにURL直打ちでアクセスされた場合では、 現状、ログイン後の画面が表示されてしまいます。 http://www.×××.com/contents.php?id=12345&PHPSESSID=8sdfasfadfasdfdsfddfasd

    • ベストアンサー
    • PHP
  • htmlのiframeについて

    iframeを使用する際に特定のidのエリアのみ表示させることはできますか? 例:取得先サイト ■ヘッダ ■コンテンツ1(id="area1") ■コンテンツ2(id="area2") ■フッタ 取得元のサイト(表示させたいサイト)に、上記サイトのコンテンツ2だけを引っ張ってきたいと考えています。 ヘッダやコンテンツ1、フッタはiframeに表示させたくありません。 コンテンツ2のみiframeに表示させたいです。 こういったことは可能でしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • 携帯ブラウザでiframe

    お世話になります。 現在作成中の携帯用HPでiframeを使用しているのですが 携帯の機種によっては 「iframe対応のブラウザでご覧ください」 とメッセージが出てしまいます。 iframeは各機種のブラウザによって制約されてしまうのは存じていますが 別のページの内容をどの機種でも表示できるようにするには どのタグを使用すればよろしいのでしょうか? アドバイスお願いいたします。

    • ベストアンサー
    • HTML
  • iframeの高さを読み込むサイトの高さにしたい。

    <iframe src="フレーム.html" width="100%" frameborder="0" ></iframe> と、記述したのですが インラインフレームの高さが小さく「フレーム.html」が全部表示し切れません。 インラインフレームの高さを「フレーム.html」の高さにあわせるにはどうしたらいいでしょうか? アドバイスお願いします。 _____________ |      || |      || |      || |途中で切れる|| |____________|| スクロールバー↑ _____________ | | | | | | | | | |       | |フレーム.html| |が全部表示  | |_____________| スクロールバーなし↑

  • 複数のiframeの表示場所が勝手に変わります。

    こんにちは、iframeの表示に関しての質問です。 1ページに7つのiframeで表示させていますが、 頻繁にiframeの表示エラーが起こります。 そのエラーというのは、iframe内で同じページが2箇所表示されるというものです。 ※(menu01.htmlとmenu02.htmlを横2列にiframeで表示されているとして、menu01.htmlが2列とも表示されてしまう、という感じです。) もちろんそれぞれのiframe内にはそれぞれ別のページが表示されるよう設定しているのですが、 ブラウザを立ち上げたり、ブラウザの戻るボタンを押すとこのようなエラーが起きてしまいます。 更新ボタンを押すと、正常に表示されるのですが。。 ↓実際に使っているiframeのタグです↓ <iframe width="122" height="7320" src="URL" scrolling="no" marginheight="0" marginwidth="0" frameborder="0" name="menu01" title="menu01">&nbsp;</iframe> (titleは余分かもしれないですが、 nameやtitleをiframeごとに名前を変えることで 直らないかなぁ、、と試行錯誤した名残です。。) ブラウザの問題なんでしょうか? ちなみに、IE6とIE7とfirefox5で動作確認していますが、 IE7が特にひどいです。firefoxでは正常に表示されていますが、 コーディング中にオフラインで表示させると、同じようなエラーが起こります。 同じ経験をされた方、解決方法がおわかりになる方、 いらっしゃいましたら、アドバイスお願いします!!

  • ブラウザ判別

    ブラウザの判別が必要になる事はよくあると思うのですが、ブラウザの種別だけでなくバージョン情報等も取得したい場合等より詳細な情報が必要な場合、皆様はどういった方法を取っていますか? 独自でスクリプトを書いている! こんなライブラリがあるよ! などご意見お願いします。

    • ベストアンサー
    • PHP
  • アクセス元判別方法

    ブラウザからアクセスしているかcgiからアクセスしているかを判別する方法としてUserAgentを見れば良いと思うのですが、UserAgentだけでは簡単に偽造されてしまうのでUserAgent以外に判別する方法をご教授お願いします。

    • ベストアンサー
    • Perl
  • iframeに追記はできますか?

    JavaScript iframeに追記はできますか? タイトルのとおりです。 インラインフレームのページと インラインフレーム内のページは 同じ場所にあって、ローカル環境です。 要は、1つのiframe内に2つのファイルを入れられるか? ・HTMLファイルを1つ追加する ・JSファイルを1つ追加する くわしい情報をご存じの方、ご教示お願い致します。

専門家に質問してみよう