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); になる。