JavaScript 中的 constructor.constructor()() 是什么?

What is constructor.constructor()() in JavaScript?

我正在 h1 上寻找错误,我找到了一种在使用 Angularjs、Nodejs 和其他 JavaScript 库的站点上使用 constructor.constructor() 触发警告框的方法,并且我希望真正了解这里发生了什么,但还没有找到确切的信息。

确切的负载是

constructor.constructor('alert(1)')()

我只找到在定义函数和 类 过程中谈论构造函数的信息,但不是作为“函数”(不确定在这种情况下这是什么)。而且我不确定触发警报框的上下文是现有库之一还是仅仅因为 JavaScript 和 DOM.

有人知道 constructor.constructor()() 是什么吗?它是如何工作的?

PS:有效载荷也放在 {{ }} 中,但它显然只是 JavaScript 而不是实际的 SSTI(7*7 由 DOM 解析但仍然保留在源代码中)

对象实例引用了它们的构造函数:

const o = {};
o.constructor === Object;

如果您不引用任何对象,您将在 window 实例的全局上下文中执行 属性,这与 window.constructor 相同:

constructor /* or window.constructor */ === Window;

WindowObject是函数实例,因为函数也是JavaScript中的对象,也就是说构造函数是Function

constructor.constructor /* or Window.constructor */ === Function;

Function 函数可用于使用字符串输入作为函数体创建函数实例——类似于eval——所以在你传入 'alert(1)' 的示例中结果是一个在执行时调用 alert(1) 的函数:

Function('alert(1)');
// is the same as
function () {
  alert(1);
}

最后一个括号执行的函数不带任何参数,这就是为什么您会看到显示带有 1 的警报。