質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

5142閲覧

window.openで開いた画面で$_SERVER["HTTP_REFERER"]を取得できますか

red13

総合スコア79

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/02/17 06:25

window.open()で開いた画面でPHPの$_SERVER["HTTP_REFERER"]を取得したいのですが
「HTTP_REFERER」が存在しません。
FireFoxとChromeでは取得できていますがIEだけ取得できません。
どのようにすればIEでwindow.open()で開いた画面で「HTTP_REFERER」を取得できるのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

よく知りませんが、IE は window.open() で開いたページをリクエストする際、ヘッダに Referer をつけない仕様のようです。
回避策としては、リンクを target="_blank" でつけてクリックしてもらうか、window.open() で空ウィンドウを作り、その中身を非同期で持ってくる、とかになるのでしょうか。
window.open()を使いつつIEでRefererを渡す方法

あとは、なぜ PHP 側で Referer を取得するのか、というところが大切です。もしセキュリティのために Referer をチェックしているのであれば、意味がないので設計を変える必要があります。

投稿2016/02/17 06:41

unau

総合スコア2468

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

red13

2016/02/17 06:54

アドレスバーにURLを貼り付けて遷移した場合にrefererが無いので 無い場合だとエラーとするように考えています。 このような方法以外にした方がよいでしょうか?
unau

2016/02/17 07:14

アドレスバーに URL を貼り付けて遷移してきた場合を排除したい理由は何ですか。 セキュリティ目的ですか。 Referer は改ざん可能です(きちんとした画面遷移を経ずに Referer をつけてリクエストこすることもできる)し、なんかのプロキシが Referer を落とすような事例もあったような。つまり、Referer は参考にはなるけれど、信頼していい情報ではないし、確実にあると思ってもいけない情報です。
red13

2016/02/17 07:24

セキュリティ目的です。 一旦は直接URLを貼り付けた場合の排除のみしか考えていません。
unau

2016/02/17 08:01

セキュリティ目的なら Referer チェックは無意味です。IE の Referer をどうにかすることを考えるより、最初からまともな CSRF 対策を考えるべきです。 それと、再度申し上げますが、Referer がサーバに漏れることを防ぐ目的などで、ブラウザ設定で Referer を送らない可能性もありますし、ブラウザが Referer をつけて送ったとしても、途中の経路で Referer が落とされてサーバに届かない可能性もある、ということはご理解ください。 https://ja.wikipedia.org/wiki/HTTP%E3%83%AA%E3%83%95%E3%82%A1%E3%83%A9
red13

2016/02/17 08:05

では直接URLを貼り付けた場合の対応はどのようにするのでしょうか? referer以外に対応方法があるのでしょうか?
unau

2016/02/17 08:12

先ほどのコメントに書きましたが、「まともな CSRF 対策」を検討してください。 詳しくはググってもらうとして、ざっくり説明すると、A -> B というページ遷移で B において本当に A から来ているかをチェックしたい場合、A の画面をクライアントに送る際、ランダムな値(以降、token)を生成し、セッションに格納すると同時にクライアントに送ります。A の画面から B に遷移するときに、クライアントから token を送るようにします。サーバでは B 画面のリクエストがあったとき、token が送られてきて、なおかつ、それがセッションに格納されているものと等しいときだけ正しい遷移だったと判定します。
red13

2016/02/17 10:21 編集

書いていませんが、CSRF対策はしています。 ただ、このあたりも初めて実装するため正確に出来ているかはわかりません。 localhost環境だと上手くいっているだろうと思う程度です。
unau

2016/02/17 11:22

CSRF 対策がなされているなら、アドレスバーに URL を貼り付けて直接リクエストしているものははじけるはずですけれども。
red13

2016/02/18 12:52

ローカル環境では特にそういう挙動はしませんでした。 a→b→cと画面遷移する場合に直接bを張り付けた場合でも表示はされました。
unau

2016/02/18 14:49

直接 b を貼り付けて表示される、ということは、CSRF 攻撃が可能、すなわち CSRF 対策ができていないということだと思いますが。
red13

2016/02/19 08:18

フレームワークが用意しているcsrf対策をしているのですが、上手くできてないようですね。 これは別問題なので後日新たに質問するかもしれません。
guest

0

試せる環境が手元になかったので自分の環境で確認出来ていませんが、IEの「Do Not Track」機能が有効になっているせいではないでしょうか?
http://www.tku.ac.jp/iss/ie10do-not-track.html

投稿2016/02/17 06:34

編集2016/02/17 06:35
narakener

総合スコア67

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

red13

2016/02/17 06:53

自分の環境だけではないので、これでは試せません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問