逃避:“var name =''”

时间:2010-10-18 15:10:05

标签: javascript escaping xss

我们的中间层需要采取措施阻止</script>逐字逐句地出现在javascript字符串中。例如,在所有浏览器中,HTML解析器在其第一次传递中将忽略javascript上下文,请参阅第一个关闭脚本,然后查看垃圾,然后查看第二个关闭脚本。请参阅:using-script-in-a-javascript-literal

<HTML>
<BODY>
  start
  <SCRIPT>
    alert( "</SCRIPT>" );
  </SCRIPT>
  finish
</BODY>
</HTML>

我首先要解决的问题是将我们为javascript字符串转义的字符扩展为包含'&gt;'和'&lt;' - 这似乎适用于我测试过的浏览器,但看起来并不符合标准:escapesequence.shtml

编辑:此规则专门用于呈现为javascript字符串文字的内容。

1 个答案:

答案 0 :(得分:5)

您需要以某种方式删除文字</

"<" + "/"
"<\/"
"<\x2F"
"\x3C/"
"<\u002F"
"\u003C/"

请参阅description of the CDATA type

  

虽然STYLESCRIPT元素使用CDATA作为其数据模型,但对于这些元素,CDATA必须由用户代理以不同方式处理。必须将标记和实体视为原始文本并按原样传递给应用程序。第一次出现的字符序列“</”(结束标记打开定界符)被视为终止元素内容的结尾。在有效文档中,这将是元素的结束标记。