5

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

有什么方法可以分离和保护我自己的代码?我可以限制不受信任代码的模块和系统影响(限制对文件的访问、非 HTTP 端口等)吗?

4

3 回答 3

1

从 node.js 文档中查看

script.runInNewContext([沙盒])

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

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

于 2010-11-13T09:09:29.827 回答
1

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

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

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

有一个可用的 Spidermonkey API 的 Perl 实现(Spidermonkey 是 Firefox 的 JS 引擎)。我在一些 CGI 的帮助下把它连接起来了。您可以在其中准确指定要公开的功能(当然,它在 Perl...blech 中)并执行您喜欢的任何代码。由于整个设置是完全沙盒的,因此不存在漏洞风险。它不模拟 DOM。

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

希望这可以帮助!

于 2010-07-23T00:15:20.503 回答
0

看看卡哈。它将第三方代码转换为代码只能访问您明确授予它的对象的形式。

于 2010-11-09T21:37:57.987 回答