2012-02-23 20 views
5

Chromeでは、ドメインの名前を含むデータを投稿した後にエラーRefused to execute a JavaScript script. Source code of script found within request.が表示されます(どちらのページにもJavaScriptがないことに注意してください)。投稿後にベースタグを無視する

badpage1.html

<form action="/badpage2.html" method="post"> 
<input type="hidden" name="name" value="href=%22http://www.w3.org/%22"/> 
<input type="submit" name="submit"/> 
</form> 

badpage2.html

<!DOCTYPE html> 
<html> 
    <head> 
     <base href="http://www.w3.org/"/> 
    </head> 
    <body> 
     <img src="Icons/w3c_home" alt=""> 
    </body> 
</html> 

あなたはbadpage2.htmlに直接移動した場合、画像が表示されますが、あなたはbadpage1.htmlを経由して、それに行けば、画像は(ベースタグが表示されません動作しません)。

これはChrome XSS検出のバグですか?もしそうでなければ、どうすればこれを迂回できますか?このフィルタをバイパスするだけで、投稿されたデータをエンコードするのは馬鹿馬鹿しいようです。

EDIT:私の場合は

、送信された後の値は、ページの内容の一部を更新することです。問題が発生した場合、<base>で使用されているドメイン名が含まれていると(この例のように)、<base>タグを無効にするXSS検出がトリガーされます。

+0

もっと - http://stackoverflow.com/questions/1547884/refused-to-execute-a-javascript-script-source -code-of-script-found-within-reque – simshaun

+0

@simshaun私はそれを見ましたが、このケースではXSSは*意図されています*(CMSエディタなので)。サーバーが送信できるヘッダーがあるか、Chromeにこれらのタイプのチェックを無効にするよう指示するものがありますか? –

+0

私が見つけることができる唯一のものはhttp://lwn.net/Articles/360424/で、いくつかの[バグ]を指しています(https://bugs.webkit.org/buglist.cgi?keywords=XSSAuditor&resolution=--- )をフィルターに入れます。フィルタは単なるスクリプト以上で動作すると思うので、エラーメッセージが混乱することがあります。本当の問題はベースhrefを外部ドメインに設定することです。 AFAIK、これはほとんどのブラウザのセキュリティモデルに違反します。それに対して信頼できるワークアウトがあるかどうかは確かではありますが、もしそうであれば、おそらく良い考えではないでしょう(私の意見では)。関連するsrc属性またはhref属性に完全なURLを入れるためにページを前処理することはできませんか? – simshaun

答えて

3

私は、カスタムHTTPヘッダーX-XSS-Protectionを保護のために台無しになっているページに送信できることが分かりました。

私は私のPHPソリューションについては、下記のコードを使用します。ここでは、この上の

header("X-XSS-Protection: 0"); 
関連する問題