使用连字符的跨站点脚本 (XSS)

Cross-site Scripting (XSS) using a hyphen

如果我将此输入 Chrome 的控制台,我会收到显示的警报:

'some string'-alert(1)-'another string'

如果我改为输入以下内容,我会得到 Uncaught SyntaxError: Unexpected identifier:

'some string'alert(1)'another string'

允许执行警报的连字符有什么意义?

因为 Javascript 不是强类型的,您可以(尝试)减去字符串。因此,解释器正在评估表达式的每个部分,其中之一是 alert。这会导致出现一个弹出窗口。由于语法不正确,interpreter/compiler 无法编译第二个。

第一个计算为:String .. minus .. 函数调用的结果.. minus .. String.

对字符串使用减法将它们转换为数字或 NaN

警报触发只是因为它是一个函数。它的 return 值未定义。

因此,在警报触发后,您实际上拥有 NaN - undefined - NaN 和 return 的 NaN,这就是您在控制台中看到的