nodeJS阻止访问传递给函数的变量的代码

时间:2015-04-27 20:23:19

标签: javascript node.js plugins

我正在使用以下内容创建插件系统:

function Plugin(thingy, code)
{
    var GLOBAL    = null;
    var arguments = null;
    var process   = null;
    var require   = null;

    eval(code);
};

plugins.push(new Plugin(thingy, code));

请不要对eval()过于兴奋,使用(' vm')或沙箱不是一个选项,因为这将是一个长时间运行的对象,直到用户卸载它。它也将在其自己的nodeJS实例中运行,因此它们不会影响其他用户。我仍然有同样的问题,无论如何都要将此对象引用传递给沙箱系统。

我关心的是有人看到具有他们需要使用的功能的物品的代码,例如shoot()

console.log(thingy.shoot.toString());

解决这个问题的方法如下:

function thingy()
{
    // They can't see this
    var _shoot = function(someone)
    {
        // Load weapon
        // Aim
        // Fire
    };

    // They can see this
    this.shoot = function(someone)
    {
        _shoot(someone);
    };
};

这样,如果他们是console.log(thingy.shoot.toString()),他们只会看到_shoot(某人);而不是处理拍摄过程的实际代码。

请有人帮我解决以下问题:

  1. 是否有更简单的方法来限制对传入的变量代码的访问?
  2. 我将GLOBAL,arguments,process和require设置为null;还有其他我需要担心的事吗?

0 个答案:

没有答案