2009-04-30 9 views
1

主なポイントは、「<」を作るために「\ <」と「>」に「>」インラインスクリプトの下に避けるようにすることです:すべてのブラウザエンジンで " <"を "<" and ">"と ">"扱いますか?

<script> 
    var foo = "</script><script>alert('bug');</script><script>"; // the value of foo is generated from server 
</script> 

FOOの文字列値は、サーバ側から生成されます。そこで、「<」を「\ <」に、「>」を「>」に変更します。 (私が知っているそこに「>」を「& GT;」エスケープする必要があるという議論があるが、それはこの場合には考慮していない。)

だから、期待される結果は次のとおりです。のために

<script> 
    var foo = "\</script\>\<script\>alert('bug');\</script\>\<script\>"; // the value of foo is generated from server 
</script> 

IE7/8とFirefoxは、HTMLレンダリングエンジンは、<スクリプト>タグとしてjavascriptの文字列で\ <スクリプト\ >を扱わないだろう、とJavaScriptエンジンは、まだ文字列として "<スクリプト>" それを取ります。しかし、すべてのブラウザがこのように ">"と "\ <"を扱うかどうかはわかりません。この種のブラウザはすべて標準ですか?

+0

FYI、クロムとサファリはそれのいずれか – cgp

+0

参照http://jsbin.com/ecefo – cgp

答えて

5

いいえ、あなたの最善の策は& gtを使用することです。および& lt;それぞれ、より大きいおよびより小さい記号のために。

は、だから、このような何かをしたいと思います:

var foo = "&lt;/script&gt;&lt;script&gt;alert('bug');&lt;/script&gt;&lt;script&gt;"; 
+0

ああ、私が持っていたことがなかったように実行しません事は私に前に起こる。どのように奇妙です。勝利 上のIE7 IE8 FirefoxのFirefoxのMacの のマック のSafari上のWinXPの 上 IE5彼らは御馳走インラインある "\>" のように ">": – cgp

+0

は、私は一般的なブラウザ上でそれを確認してください。 –

関連する問題