我希望能够让用户提交任意JavaScript代码,然后将其发送到Node.JS服务器并安全执行,然后将输出发送回多个客户端(作为JSON).eval我想到了这个功能,但我知道这有多个安全问题(用户提交的代码可以访问Node的File API等).我见过一些项目,如Microsoft Web Sandbox和Google Caja,它们允许执行清理标记和脚本(用于在网站上嵌入第三方广告),但似乎这些是客户端工具,我不确定它们是否可以在Node中安全使用.
有没有一种标准的方法来沙盒并在Node中执行不受信任的JavaScript,从而获得输出.尝试做这个服务器端是错误的吗?
编辑:用户能够利用JavaScript的全部功能并不重要,事实上,最好能够选择将哪些API提供给用户代码.
编辑:我将继续使用我发现的内容进行更新.这个Sandcastle模块(bcoe/sandcastle)似乎旨在实现我的想法.不确定它有多安全,但由于我不是太重要,我想如果尝试的话.如果我能成功地做到这一点,我会添加自己的答案.
我想创建一个在本地运行其他人代码的Web服务...当然,我想限制他们对某些"sandbox"目录的代码访问,并且他们将无法连接到我的服务器的其他部分(DB,main网络服务器等)
什么是最好的方法呢?
运行VMware/Virtualbox:
(+)我猜它就像它得到的那样安全......即使有人设法"破解"......他们只会破解客人机器
(+)可以限制进程使用的cpu和内存
(+)易于设置..只需创建VM
( - )更难将沙箱目录从主机"连接"到guest虚拟机
( - )浪费额外的内存和CPU来管理VM
运行弱势用户:
(+)不会浪费额外的资源
(+)sandbox目录只是一个普通目录
(?)不能限制CPU和内存?
(?)不知道它是否足够安全......
还有其他方法吗?
运行Fedora Core 8的服务器,用Java和C++编写的"其他"代码
想象一下我想要不断调用用户提供的Javascript代码的场景,如下例所示,其中getUserResult是某个用户(非我自己)编写的函数:
for (var i = 0; i < N; ++i) {
var x = getUserResult(currentState);
updateState(currentState, x);
}
Run Code Online (Sandbox Code Playgroud)
如何在浏览器和/或Node.js中执行这种代码,没有任何安全风险?
更一般地说,如何执行不允许修改甚至读取当前网页或任何其他全局状态的Javascript函数?是否有类似浏览器内的"JS虚拟机"?
JSFiddle如何确保您不能运行任何恶意代码(至少它可能会破坏您的登录名,在页面生命周期内运行机器人,如果不做更糟糕的事情)?或者它根本不确定?
我是一个完整的Node noob,所以如果这个问题有明显的答案我很抱歉.
我正在寻找创建一个Web应用程序,它将从不受信任的来源(即社区提交)运行插件.因此,我需要将这些插件锁定到沙盒中,在沙盒中只允许某些访问(无法写入磁盘等).理想情况下,插件只能使用某些经过批准的节点包和API.
在Node中这可能吗?如果是这样,你能指点我一个能让我入手的包裹或文件吗?
我似乎无法弄清楚如何设置节点沙箱,它可以安全地运行不受信任的代码,并允许用户通过 api 调用(系统输入和输出)与程序进行交互。我正在尝试在浏览器中设置一个控制台,供用户从服务器运行他们自己的代码。
是否有任何支持此功能的节点包,或者我是否需要编写自己的节点 VM?谢谢。
编辑:我希望用户能够编写readline()并让程序在断点处等待数据传输。类似地console.log(),输出应重定向到输入 api 调用的响应。
我有一个用 JavaScript(node.js) 编写的应用程序服务器。我接受 JS 函数代码作为来自 Web 浏览器的输入。现在我希望能够在服务器上运行这个功能而不影响其他任何东西。
我想确保该函数正在修改的所有变量都是该函数的本地变量,并且不会影响服务器上的任何其他变量。
另外,我想以某种方式避免无限循环或递归以及任何其他不可预见的问题。
大多数情况下,我希望用户能够在我采取某些操作之前触发一些代码作为要运行的函数。
有任何想法吗 ?