【问题标题】:Letting third-party JavaScript access global variables让第三方 JavaScript 访问全局变量
【发布时间】:2012-06-06 16:21:19
【问题描述】:

我正在为非程序员创建一个 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() 脚本(但这很糟糕,对吧?)
  • 在全局范围内设置所有全局变量,然后正常运行脚本(但是 DOM 全局变量呢,比如window?)

我可能可以使用Google Caja 保护全局范围。我还希望它具有高性能,因为在同一台服务器上每秒会运行许多 Step() 函数。

【问题讨论】:

  • 在您的示例中根本不清楚什么应该是“全局的”,什么不是。也不清楚这段代码在什么上下文中运行 - 服务器?客户?两者都有?
  • 已更新。谢谢指点。

标签: javascript api security


【解决方案1】:

由于用户脚本是以文本形式接收的,我不关心限制对documentwindow 等的访问(这是一个私人应用程序),eval()ing 是最好的选择。

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

【讨论】:

    猜你喜欢
    • 2014-01-17
    • 2019-02-24
    • 2018-10-28
    • 2022-06-11
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 2012-11-16
    相关资源
    最近更新 更多