使用连字符的跨站点脚本 (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
,这就是您在控制台中看到的
如果我将此输入 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
,这就是您在控制台中看到的