在JavaScript字符串文字,一方面转义HTML实体,如果我有在<script>块
<script>
var s = 'Hello </script>';
console.log(s);
</script>
浏览器将提前终止<script>
块,基本上我得到的页面搞砸了。另一方面,字符串的值可能来自用户(例如,通过先前提交的表单,现在字符串最终以文字的形式插入到<script>
块中),因此您可以期望得到任何东西在那个字符串中,包括恶意形成的标签。现在,如果我逃脱字符串文字与ヶ辆()生成的页面时,s的值将包含转义实体字面上,即旨意输出
Hello </script>
未在此情况下期望的行为
。正确地转义一个<script>
块内JS字符串
一种方式是逃避斜线,如果它遵循左尖括号,或者只是一直逃避斜线,即
var s = 'Hello <\/script>';
这似乎是工作的罚款。然后在HTML事件处理程序中出现JS代码的问题,这些问题很容易被破坏,例如,
<div onClick="alert('Hello ">')"></div>
看起来有效,但在大多数(或全部?)浏览器中打破。这显然需要完整的HTML实体编码。
我的问题是:什么是最好的/标准的做法,适当覆盖上述所有情况 - 即脚本块内的JS,事件处理程序中的JS - 如果您的JS代码可以部分在服务器端生成并且可能潜在包含恶意数据?
可能重复[JavaScript和错误“未打开的元素的结束标记”](http://stackoverflow.com/questions/2744583/javascript-and-error-end-tag-for-element-which-is-not-open ) – Quentin 2012-01-05 21:47:42