关于JavaScript字符串中XSS注入特殊格式的技术疑问
问题解答
为什么test'-alert(2)-'hello能触发XSS?
看最终生成的JS代码:
var commentContent='test'-alert(2)-'hello';
这里的核心是JavaScript运算符的执行逻辑:
- 减号
-是算术运算符,它会先执行两边的表达式再进行运算。alert(2)是函数调用,不管它的返回值是什么(alert返回undefined),函数本身会先执行——也就是先弹出弹窗,之后才会处理'test' - undefined - 'hello'的运算(这部分运算结果是NaN,但这不影响alert已经执行了)。 - 你用
typeof检测到的是最终运算结果的类型(NaN属于number类型),但这和alert是否执行无关——alert在运算之前就已经跑完了。
为什么test'alert(2)'xss无效?
生成的代码会变成:
var commentContent='test'alert(2)'xss';
这是明显的语法错误:字符串'test'后面直接跟alert标识符,没有任何运算符或分隔符,JS引擎解析到这里就会抛出错误,整个脚本执行中断,alert(2)根本没机会运行。
内容的提问来源于stack exchange,提问作者Kenneth Cox
相关产品推荐
相关产品推荐

