所有浏览器引擎都会处理“\<”作为“<”和“\>”作为“>”?

时间:2009-04-30 02:34:32

标签: javascript html browser escaping

制作“<”的要点到“\<”和“>”到“>”是为了避免使用下面的内联脚本:

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

foo的字符串值是从服务器端生成的。所以,我们打算改变“&lt;”到“\&lt;”和“&gt;”到“&gt;”。 (我知道有一些论点认为“&gt;”应该转义为“&amp; gt;”,但在这种情况下不考虑它。)

所以,预期的结果是:

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

对于IE7 / 8和Firefox,HTML呈现引擎不会将javascript字符串中的 \&lt; script \&gt; 视为&lt; script&gt; 标记和JavaScript引擎仍然将其作为字符串“&lt; script&gt;”。但是,我不确定所有浏览器是否都会处理“&gt;”和“\&lt;”这条路。这是所有浏览器的标准吗?

1 个答案:

答案 0 :(得分:5)

不,你最好的选择是使用&amp; gt;和&amp; lt;分别大于和小于标志。

所以你想要这样的东西:

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