Edited at

Location: javascript:alert(1) が返ってきた時のブラウザの動作

More than 3 years have passed since last update.

DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)

http://www.slideshare.net/harupu/denatechcondenasameorigin-policy#33

こちらの資料の方が詳しいです


以下古い記述

Http ヘッダのリダイレクト先を示す箇所にjavasciptの実行スクリプトが含まれていた場合にどうなるか。

オープンリダイレクタがあり、なおかつ使っているフレームワークやライブラリの抜けがあるとかそんな場合ぐらいしかないと思われるけれど、気になったので軽く調べた。


Chrome

リダイレクトされない

developer tools上でレスポンスが表示されない。

Chrome Cananyでは"Request Headers CAUTION: Provisional headers are shown."の表示がHeadersに出る。


Safari

javascript:alert(1) にリダイレクトされる

しかし、javascriptは実行されない。

"SafariはこのようなJavasScriptの使用方法を許可していません。"とでる。

→ Safari 6.1にアップデートすると、リダイレクトもされなくたった。


Firefox

リダイレクトされない。

"コンテンツデータ破損エラー"として扱われる。

コンソールから応答ヘッダに”Location: javascript:alert(1)”が入っていることが確認できる。


Opera

chromeと同じ


Internet Explorer 10

リダイレクトされない

"このページは表示できません"と表示される。

開発者ツールの応答ヘッダーから確認できる。


その他のブラウザ

未確認


検証方法

最初phpでヘッダー直接書いて試していたのだけれど、express.jsでjavascript:から始まる文字列をLocationへ含めることができた。

app.get('/redirect', function(req, res){

res.redirect(301, 'javascript:alert(1);"://";');
});

javascript:alert(1); をそのまま入れると、 返ってくるuriは /javascript:alert(1); になる。