【问题标题】:Which languages have readily available safe evaluation environments?哪些语言具有现成的安全评估环境?
【发布时间】:2010-01-26 18:16:42
【问题描述】:

我具体说的是类似的东西 the PLT Scheme make-evaluator

它将运行方案代码,但在某些条件下:

  • 它只使用可定义的内存量,如果脚本需要更多内存,它将退出执行
  • 它的行为与时间相似
  • 它限制了所有 IO,除了我在代码中明确允许的内容

有没有人熟悉其他可以做到这一点的东西?

【问题讨论】:

  • JavaScript?但在实践中,JavaScript 内存分配是不受限制的。
  • 请注意,PLT 沙箱库做了一大堆额外的工作。例如,初始化某些状态的模块将在沙盒环境中重新初始化。最好的查看方法是在模块中定义一些 foo 结构,然后在沙箱内使用 make-foo 并在沙箱外使用 foo? 测试值 - 结果将是 #f。跨度>

标签: programming-languages scheme language-features evaluation


【解决方案1】:

Lua 可让您轻松定义 sandboxes 所需的权力大小。

【讨论】:

  • 这看起来不如 PLT 沙箱强大——特别是,在不限制运行时和内存的情况下,整个事情最终并不是真正安全的,因为它会让您在自己的服务器上运行随机用户代码。另一个问题是需要通过限制沙盒环境中的名称来控制 IO —— plt 沙盒会限制 IO,而不管名称如何(这使得允许某些路径进入)。此外,通过设置值与沙箱通信似乎不太有吸引力......
  • C api 中有一些钩子可以用来限制时间和/或内存,邮件列表存档可能是一个更好的搜索位置。将标准 IO 替换为检查您的策略规则的 IO 少于 200 行 Lua。 Lua 中的许多事情,你必须自己动手,但这很容易做到。如果你需要一个完全预构建的系统,Lua 不适合你。
  • 我怀疑是否存在可用于在其他不受限制的环境中限制沙盒环境内存的钩子——这比几个钩子更多涉及。标准 IO 也是如此——如果沙箱可以对一个目录执行完整 IO、从另一个目录进行只读操作以及对单个 IP 进行网络操作,那又如何呢?
【解决方案2】:

PHP 允许使用 eval 进行类似的操作 - 尽管您需要在调用 ini_set 之前设置一些限制性值,它们也会影响当前脚本。

【讨论】:

    【解决方案3】:

    Java 平台提供细粒度的访问控制和沙盒。 这并不完全等同于 make-evaluator,但 API 允许您对任意对象设置约束(通过 GuardedObject 类)。您还可以限制从特定源加载的类的权限。

    阅读Java Platform Security Architecture spec可能会有所帮助

    请注意,Java API 可以从 jvm 上的大多数语言访问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      • 2016-12-06
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 2015-01-03
      • 1970-01-01
      相关资源
      最近更新 更多