我正在编写一个简单的库,它将从给定字符串属性的对象中读取值。
是否可以读取属性但是在没有实际调用函数的情况下执行函数?
类似的东西:
var obj = {
fn : (function malicious(){ deleteLotsOfFiles();
})()
}
如果我这样做
var foo = obj.fn;
有没有办法只是通过读取属性来执行(恶意)函数?
答案 0 :(得分:2)
var obj = {
get fn() { deleteLotsOfFiles(); }
};
// later
var o = obj; // deleteLotsOfFiles has not been executed
console.log(o.fn); // you just deleted lots of files
答案 1 :(得分:1)
在您引用恶意函数之前,恶意函数已经执行过了。一旦引擎解析了该函数,它就会立即执行(自我调用)。
答案 2 :(得分:1)
替代
var o = Object.defineProperty(o, 'baz', {
get: function(){
console.log("Delete Everything!");
}
});
然后访问o.baz
并删除它们
有关MDN
的获取者的更多信息有时需要允许访问返回a的属性 动态计算值,或者您可能想要反映其状态 内部变量,无需使用显式方法 呼叫。强>
看起来非常像你想做的事。