Javascript 逃逸:“;变量名称='</脚本>'&引用;

Javascript 逃逸:“;变量名称='</脚本>'&引用;,javascript,escaping,xss,Javascript,Escaping,Xss,我们的中间层需要采取措施防止在javascript字符串中一字不差地出现。例如,在所有浏览器中,HTML解析器在其第一个过程中将忽略javascript上下文,查看第一个关闭脚本,然后查看垃圾,然后查看第二个关闭脚本。见: 开始 警报(“”); 完成 我解决这一问题的第一个想法是扩展javascript字符串转义的字符,使其包含“>”和“您需要删除文本您需要删除文本为什么不将/替换为\/”?这似乎可能会导致比它解决的问题更多的问题。不管怎样,意外地出现在脚本代码中的频率有多高?@rhino会

我们的中间层需要采取措施防止
在javascript字符串中一字不差地出现。例如,在所有浏览器中,HTML解析器在其第一个过程中将忽略javascript上下文,查看第一个关闭脚本,然后查看垃圾,然后查看第二个关闭脚本。见:


开始
警报(“”);
完成

我解决这一问题的第一个想法是扩展javascript字符串转义的字符,使其包含“>”和“您需要删除文本
您需要删除文本
为什么不将
/
替换为
\/
”?这似乎可能会导致比它解决的问题更多的问题。不管怎样,
意外地出现在脚本代码中的频率有多高?@rhino会把
var x=a/b
因此您必须足够准确地解析Javascript,才能知道字符以字符串文字形式出现。我在中间层有单独的规则,用于将渲染时间转义为HTML、XML、XML属性、JS属性、JS字符串,等等。把所有这些都塞进一条规则可能会是一场灾难。你为什么不把
/
换成
\/
?这似乎会导致比它解决的问题多得多的问题。不管怎样,
意外地出现在脚本代码中的频率有多高?@rhino会把
var x=a/b
因此,您必须足够准确地解析Javascript,才能知道字符以字符串文字形式出现。我在中间层有单独的规则,用于将渲染时间转义为HTML、XML、XML属性、JS属性、JS字符串等。将所有这些规则塞进一个规则中可能会是一场灾难。
<HTML>
<BODY>
  start
  <SCRIPT>
    alert( "</SCRIPT>" );
  </SCRIPT>
  finish
</BODY>
</HTML>
"<" + "/"
"<\/"
"<\x2F"
"\x3C/"
"<\u002F"
"\u003C/"