LocationヘッダにURL以外を設定したときのブラウザの挙動

※当サイトではアフィリエイト広告を利用しています

HTTPヘッダのリダイレクト先を示す箇所に、javasciptの実行スクリプトが含まれていた場合に、ブラウザがどのような挙動をするのでしょうか?

Locationヘッダについて

ブラウザはWebサーバにHTTPリクエストを送信し、その応答であるHTTPレスポンスのレスポンスコードが302などリダイレクトを示すものである場合、自動的にリダイレクトを行う。このとき、リダイレクトを行う先の情報として利用されるのが、レスポンスヘッダの「Location」ヘッダである。Locationヘッダには、ブラウザが次にアクセスすべきURLが記載されており、実際にユーザーのブラウザ上に表示されるコンテンツは、Locationヘッダに記載されたURLとなる
http://www.atmarkit.co.jp/ait/articles/0804/08/news137_2.html

つまり、ここに設定されたURLに自動的にリダイレクトされるということです。

URL以外はRFCの準拠違反

Locationヘッダに設定される値は、URL以外は認められません。

なぜなら、RFCで「値は単一の絶対URIで構成される。」と定義されているからです。

Location = “Location” “:” absoluteURI

An example is:

Location: http://www.w3.org/pub/WWW/People.html
http://tools.ietf.org/html/rfc2616#page-135

ということで、このLocationヘッダに、javascriptの実行スクリプトが含まれていた場合、ブラウザがどのような挙動をするか、chromで試してみます。

Locationヘッダに、javascriptの実行スクリプトが含まれている場合

例えば、以下のような場合どうなるのでしょうか。

<!--?php   	header('Location: javascript:alert();', true, 301);    	exit();   ?-->

ブラウザの挙動

chromeでは、やはりリダイレクトされませんでした。
デベロッパツールのレスポンス詳細には「Request Headers CAUTION: Provisional headers are shown」と表示されていました。

IEでも同様にリダイレクトされず、代わりに「このページは表示できません」の画面が表示されました。

やはりURL以外の値は認められないようです。

コメント