javascript alert() 函数的算术运算

Arithmetic operation around javascript alert() function

我一直在使用 portswigger academy 练习一些黑客技能,并且在其中一个实验室中有一个搜索引擎具有反映的 XXS 漏洞。

在搜索引擎中输入字符串 foo 生成此源代码:

<section class="blog-header">
<h1>0 search results for 'foo'</h1>
</section>

实验室的解决方案是输入 '-alert(1)-' 生成的以下源代码:

<section class="blog-header">
<h1>0 search results for '&apos;-alert(1)-&apos;'</h1>
</section>

谁能解释一下为什么要插入-算术运算? - 除了减法运算外,如何与 JavaScript 一起使用?

How does - work with JavaScript except for the subtraction operation?

- 在字符串或模板文字(其中只是 - 字符)之外所做的唯一事情是:

  • 减法(二元运算符,a - b
  • 否定(一元运算符,-a
  • 在正则表达式文字中,它表示字符 class 中的一个范围(例如,/[A-F0-9]/i 表示十六进制)。

在您引用的内容中,- 只是字符串中的一个字符。那里没有成功的 XSS 攻击。 (也许它在网站的其他地方。)

这似乎不对...我在您的示例中没有看到任何 JS 执行!警报只是文本的一部分。

但是,如果在其他地方使用它,尤其是在服务器生成的 Javascript 代码中,那么它就有意义了。因为 var x = 'foo' 会变成 var x = '' - alert(1) - '',这确实会从空字符串中减去 alert(1)(即 undefined)的结果,但它也适用于 + 或其他任何东西,因为它只是为了从字符串中转义并将警报评估为代码。 x 变量将包含垃圾,但您已经实现了结果 - 执行代码。