提问人:Alvaro 提问时间:4/6/2022 最后编辑:Heretic MonkeyAlvaro 更新时间:4/6/2022 访问量:807
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 解析但保留在源代码中)
答:
3赞
zzzzBov
4/6/2022
#1
对象实例具有对其构造函数的引用:
const o = {};
o.constructor === Object;
如果不引用任何对象,则在实例的全局上下文中执行该属性,这与:window
window.constructor
constructor /* or window.constructor */ === Window;
Window
并且是函数实例,因为函数也是 JavaScript 中的对象,这意味着构造函数是Object
Function
constructor.constructor /* or Window.constructor */ === Function;
该函数可用于使用字符串输入作为函数体来创建函数实例(类似于 ),因此在传入结果的示例中,是一个在执行时调用的函数:Function
eval
'alert(1)'
alert(1)
Function('alert(1)');
// is the same as
function () {
alert(1);
}
最后,最后一个括号在没有任何参数的情况下执行该函数,这就是为什么您会看到警报显示为 .1
评论