我在 h1 上尋找錯誤,我找到了一種constructor.constructor() 在使用 Angularjs、Nodejs 和其他 JavaScript 庫的網站上觸發警報框的方法,我希望真正了解這里發生了什么,但還沒有找到確切的資訊。
確切的有效載荷是
constructor.constructor('alert(1)')()
我只發現在定義函式和類的程序中談論建構式的資訊,而不是作為“函式”(不太確定在這種情況下這是什么)。而且我不確定觸發警報框的背景關系是否是現有的庫之一,或者僅僅是因為 JavaScript 和 DOM。
有人知道constructor.constructor()()是什么嗎?它是如何作業的?
PS:有效載荷也放在 {{ }} 內,但它顯然只是 JavaScript 而不是實際的 SSTI(7*7 由 DOM 決議,但保留在源代碼中)
uj5u.com熱心網友回復:
物件實體具有對其建構式的參考:
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.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/468482.html
標籤:javascript 节点.js angularjs dom
