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;
Window
和Object
是函数实例,因为函数也是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
的警报。
我正在 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;
Window
和Object
是函数实例,因为函数也是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
的警报。