为什么空方法在 JavaScript 中就像接收器一样工作?

问题描述 投票:0回答:1

我用空方法

a
定义对象
b()
。该方法没有参数并且什么也不做!

请问有人告诉我,为什么当我调用

a.b()
并传递JS代码作为参数时,它会执行代码吗?

var a = {
  b() {}
}

a.b('' - alert(1) - '');

它就像一个接收器,例如 eval、setInterval、setTimeout 并给出 JS 代码并执行它!

javascript browser xss exploit
1个回答
0
投票

也许您的误解是由于语法造成的。

如果您考虑要传递给

a.b()
的内容并仅将其放入控制台,您将看到:

> ''-alert(1)-''
NaN

因为你在这里做一些“数学”:一个空字符串

''
减去函数调用的返回值
alert(1)
(返回
undefined
),然后减去另一个空字符串。

如果你对 plus 做了同样的事情,javascript 会将所有内容连接到一个字符串中:

> ''+alert(1)+''
"undefined"

所以基本上,您的代码会在任何内容传递给函数之前执行

a.b
。如果您不希望发生这种情况,则必须通过以下方式之一正确引用对
alert(1)
的调用:

'alert(1)'
"alert(1)" // but not ''alert(1)''
`alert(1)`
© www.soinside.com 2019 - 2024. All rights reserved.