让第三方JavaScript访问全局变量

时间:2012-06-06 16:21:19

标签: javascript api security

我正在为非程序员创建一个API,为虚拟多人战斗机场竞技场编写第三方代码。使用全局变量的语法很好:

function Step() {
    if (sensor.wall) {
        movement.brake();
        movement.turnLeft();
    }
    if (sensor.enemy) {
        movement.shoot()
    }
    if (movement.speed < 1)  {
        movement.accelerate(.1);
    }
}

以上示例中的全局变量为sensormovement。剧本作者不关心他们来自哪里,只是他们可以访问。 (不,这不是最终语法。只是在这里进行原型设计。)

脚本将在客户端(浏览器)和服务器上运行(通过Node或Spidermonkey)。

那么,怎么做?看起来我的选择是:

  • 在词汇上设置所有全局变量然后eval()设置脚本(但这很糟糕,对吗?)
  • 在全局范围内设置所有全局变量然后正常运行脚本(但是像window这样的DOM全局​​变量呢?)

我可以使用Google Caja确保全局范围。我也希望这是高效的,因为很多Step()函数将在同一台服务器上每秒运行。

1 个答案:

答案 0 :(得分:0)

由于用户脚本是以文本形式接收的,因此我不关心对documentwindow等的访问权限(它是私有应用程序),eval()是最好的选择。

function evaluateScript(movement, sensor, content) {
    return eval(content);
}