我正在寫一個簡單的庫,它將從給定字符串屬性的對象讀取值。在JS對象中注入自執行函數作爲值
是否可以讀取屬性,但有一個函數可以執行而不實際調用該函數?
類似:
var obj = {
fn : (function malicious(){ deleteLotsOfFiles();
})()
}
,如果我做
var foo = obj.fn;
是有辦法通過閱讀財產執行(惡意)的功能?
我正在寫一個簡單的庫,它將從給定字符串屬性的對象讀取值。在JS對象中注入自執行函數作爲值
是否可以讀取屬性,但有一個函數可以執行而不實際調用該函數?
類似:
var obj = {
fn : (function malicious(){ deleteLotsOfFiles();
})()
}
,如果我做
var foo = obj.fn;
是有辦法通過閱讀財產執行(惡意)的功能?
甚至在引用它之前,惡意函數已經執行了。一旦函數被引擎解析,它就會立即執行(自我調用)。
var obj = {
get fn() { deleteLotsOfFiles(); }
};
// later
var o = obj; // deleteLotsOfFiles has not been executed
console.log(o.fn); // you just deleted lots of files
一種替代
var o = Object.defineProperty(o, 'baz', {
get: function(){
console.log("Delete Everything!");
}
});
然後訪問o.baz
並且它們被從MDN
刪除上的吸氣劑
更多信息有時期望的是允許訪問一個返回012的財產動態計算值,或者您可能想要反映內部變量的狀態 而不需要使用明確的方法 調用。
看起來很像你想要做的事情。
您可以使用[MDN:Object.defineProperty()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty)爲屬性定義getter。你也可以看看這個問題[如何使用javascript Object.defineProperty](http://stackoverflow.com/questions/18524652/how-to-use-javascript-object-defineproperty) –
爲什麼你不相信你的論點? – Bergi