【问题标题】:Allowing the user a sandboxed version of a programming language允许用户使用编程语言的沙盒版本
【发布时间】:2012-06-15 01:14:03
【问题描述】:

注意:我会很感激这个标签的一些建议..

我想为我的用户提供一种以编程方式操作服务器上数据的方法。这将通过使用稍后执行的浏览器内代码编辑器来完成,与https://www.onx.ms 采用的方式没有什么不同。

我想避免编写 DSL(采用的障碍?),并且希望用户编写的语言是基于 JavaScript 或 Ruby 的。

我最关心的是安全性。我了解允许用户生成的代码在服务器端运行的风险,但我可以采取哪些步骤来消除风险?

http://railsforzombies.com 这样的网站真的使用irb,还是比这简单得多?

【问题讨论】:

    标签: user-input sandbox


    【解决方案1】:

    您会考虑使用 Java(或其他 JVM 语言,如 JRuby、Scala、Clojure 等)吗?如果是这样 - JVM 中有强大的功能来限制沙盒应用程序的权限。有关详细信息,请参阅其他问题:How do I create a Java sandbox?

    【讨论】:

      【解决方案2】:

      Google Caja 让您可以在您的网站中安全地嵌入用户指定的 Javascript,但我认为它可能旨在在用户的浏览器中而不是在您的服务器上运行代码。我自己没用过。

      我不知道是否有针对其他语言的现成解决方案,但我认为自定义解决方案将涉及在删除所有允许用户写入磁盘、打开网络连接、fork 的 API 库之后自己重新编译解释器进程/线程,并执行任何其他危险或拒绝服务操作。将“安全”库列入白名单是唯一可行的方法。

      如果您为个人用户提供单独的虚拟服务器会更安全。

      【讨论】:

      • Caja 没有沙箱来抵御拒绝服务攻击。它无法防御用户运行永恒的while(true){} 循环或分配大量内存。沙盒 iframe 中的 Javascript 具有与 Caja 相同的安全保证(但缺乏 dos 保护),同时更易于使用且更标准。
      猜你喜欢
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多