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以外の値は認められないようです。
コメント