对于服务器端沙盒脚本,我有哪些选择?[关闭]


11

我正在建立一个公共网站,用户可以在其中共享数据和脚本以运行某些数据。该脚本在某种沙箱中在服务器端运行,而在此周期中没有其他交互:我的Perl程序从数据库中读取用户制作的脚本,将要处理的数据添加到脚本中(即JSON文档),然后调用解释器,返回响应(JSON文档或纯文本),我使用perl脚本将其保存到数据库。该脚本应该可以自己访问添加到脚本语言中的内置函数,但是仅此而已。

因此,我偶然发现了node.js作为一个JavaScript解释器,大约一个小时前就使用了Google的V8(v8对这种事情有意义吗?)。我也想到了CoffeeScript,因为它看起来不错并且仍然是Javascript。

我认为javascript足够广泛并且更易于“沙盒化”,因为它没有操作系统调用或任何远程不安全的东西(我认为)。

顺便说一句,我在Perl和Php上为前端编写系统。

为了改善这个问题:我之所以选择Javascript,是因为我认为可以使用node.js来实现它既安全又简单,但是实现这种任务还有哪些其他选择呢??蟒蛇?我只是找不到有关如何以适当方式运行沙盒解释器的信息。


您不清楚要问什么。可能吗?当然可以。
罗伯特·哈维

Answers:


3

Java包含内置的JavaScript解释器。默认情况下未将其沙盒化,但是可以通过以下方式启用它:

  • 设置正确的类快门-JavaScript通常可以加载Java类。类快门是一种安全管理器,它决定可以加载哪些类以及不能加载哪些类。
  • “启动”脚本-简短的JavaScript初始化,它将删除对外部系统的访问点: java = undefined;Packages = undefined;org = undefined;

如果执行此操作,则在内部运行的脚本不应以任何方式访问外部环境。

它还提供了脚本超时和指令计数限制功能,该功能对于沙箱很有用-您可以限制脚本的时间或复杂程度。

我在具有Rhino JavaScript引擎的Java 7中使用了此功能。Java 8具有更新,更现代的引擎Nashorn-我没有在Nashorn上尝试过,但我希望它应该与之相似。


您可以将白名单列入黑名单吗?
佩塔2015年

@Petah,您可以先禁用所有内容(黑名单),然后将对象形式的某些特定功能推送到沙箱中。然后,这实际上是白名单,所以是的,您可以这样做。
2015年

JavaScript知识非常广泛,使其成为脚本语言的不错选择。您可能要定义一些全局变量以及对用户的呼叫,因为您要限制对呼叫的访问。想一想浏览器如何window为JavaScript 定义变量以实现交互。
Michael Shopsin,2015年

2

我首先想到的是node.js-正如您在上面提到的,它是一个javascript解释器。如果您想以一种真正安全的方式对脚本进行沙箱处理,那正是您需要的东西。

另一种方法可能是,检查脚本中的每个命令是否有效。但我认为您不会获得安全的沙箱。

问候


NodeJS是否有任何沙盒支持或可用于NodeJS?
ysdx 2012年

4
发现了这一点:gf3.github.com/sandbox
ysdx 2012年

+1获得指向“ NIFTY JAVASCRIPT SANDBOX FOR NODE.JS”的链接。
杰克·斯通

注意:可以破解gf3沙箱。
佩塔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.