在JS对象中

时间:2016-02-11 18:35:07

标签: javascript node.js

我正在编写一个简单的库,它将从给定字符串属性的对象中读取值。

是否可以读取属性但是在没有实际调用函数的情况下执行函数?

类似的东西:

var obj = {

fn : (function malicious(){    deleteLotsOfFiles();
})()

}

如果我这样做

var foo = obj.fn;

有没有办法只是通过读取属性来执行(恶意)函数?

3 个答案:

答案 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的属性   动态计算值,或者您可能想要反映其状态   内部变量,无需使用显式方法   呼叫。

看起来非常像你想做的事。