保护SSJS免受未经验证的代码

时间:2010-07-22 20:08:15

标签: javascript security trusted-vs-untrusted

我想使用node.js(或其他SSJS解决方案),运行我自己的代码+内部编写的代码(不可信)。

任何分离和保护我自己的代码的方法?我可以限制不受信任的代码的模块和系统效果(限制对文件,非HTTP端口等的访问)吗?

3 个答案:

答案 0 :(得分:1)

你可以查看这个项目,看起来很有希望:

http://github.com/gf3/node-sandbox

就个人而言,我不使用Node来执行任意SSJS。你可能不会喜欢这个解决方案,但它对我来说大约一年都很好:

有一个Perl实现的Spidermonkey API(Spidermonkey是Firefox的JS引擎)that's available。在一些CGI的帮助下,我把它搞定了。您可以在其中准确指定要公开的函数(已授予,它在Perl ... blech中)并执行您喜欢的任何代码。由于整个设置完全是沙箱,因此不存在漏洞风险。它不模拟DOM。

我在服务器上实现此功能(以防止滥用)的方法是发出令牌,这些令牌通过其他服务器上的REST API授予一次性访问权限。这是一个简单的HMAC实现,包括一个时间戳来强制令牌的合法性。当Perl脚本收到请求时,它会验证令牌并处理脚本(脚本应该只是POST请求的一部分)。然后Perl脚本只写出结果。我的服务器设置为在10秒左右达到超时。

希望这有帮助!

答案 1 :(得分:1)

从node.js文档中查看此内容

  

script.runInNewContext([沙箱])

     

类似于Script.runInNewContext(注意大写'S'),但现在是一个   预编译Script对象的方法。 script.runInNewContext运行   使用sandbox作为全局对象的脚本代码并返回结果。   运行代码无权访问本地范围。沙箱是可选的。

http://nodejs.org/api.html#script-runinnewcontext-105

答案 2 :(得分:0)

看看Caja。它将第三方代码转换为代码只能访问您明确授予它的对象的表单。