【问题标题】:Secure, sandboxable user exposed programming language / environment?安全、可沙盒化的用户公开编程语言/环境?
【发布时间】:2008-12-17 01:38:54
【问题描述】:

除了为我的网站提供 API 之外,我还想为用户提供编写可在我的服务器上运行的简单脚本的能力。脚本可以访问用户拥有的对象,并能够操作、修改和以其他方式处理其数据。

我希望能够将这些脚本占用的资源限制在一个精细的水平(例如,最大执行时间应该是 100 毫秒)。我还想确保一个安全的沙箱,这样每个用户只能访问有限的数据和资源集,并且不能访问磁盘、其他人的数据等。

通常脚本会非常简单(例如,创建符合特定条件的值的总和或平均值),并且它们通常会在模板中使用(例如,在此单元格或 html 元素中填写平均值或总和)。

理想情况下,我希望使用一种众所周知的常用编程语言的沙盒子集,以便用户轻松上手。后端是用 Python 编写的,因此基于 Python 的语言可能会有好处,但我对其他语言和技术持开放态度。 Javascript 也因其简单的性质和普遍的可用性而具有吸引力。

语言应该支持创建 DSL 和库。

目标受众是基于 Web 的应用程序的一般用户群,不一定是非常技术性的。换句话说,它不是针对具有任何特定编程语言的特定知识的基础。我的期望是一部分用户将创建将被大多数人使用的脚本。

对语言和技术有什么想法或建议吗?有没有其他人尝试这样做的例子以及他们遇到的成功和失败?

【问题讨论】:

  • 我有几个 web 应用程序的想法,这是一个核心概念。使用非 DSL 语言(如 Python)的技术的加分点,沙盒在低级别 - 即,可以访问核心库而没有系统调用。是否可以选择在受限用户帐户中运行代码?
  • 受限用户帐户是指实际的 Unix 帐户吗?如果是这样,可能不会。你用什么做沙盒?
  • 没什么,完全没有经验。只是对选项感兴趣。
  • @Parand - 你最终得到了什么来解决你的问题?
  • Brian,我最终没有找到可行的解决方案。 PyPy 沙盒 (codespeak.net/pypy/dist/pypy/doc/sandbox.html) 看起来很有希望,服务器端 javascript 框架之一也是如此(我相信是 Rhino),但我没有接触到实际的实现,所以我不知道它们的效果如何。跨度>

标签: javascript python sandbox


【解决方案1】:

我为此使用 Lua,但它针对的是支持 Lua 的社区。所以我的答案是你的用户是谁?

如果您的用户是内部用户(例如我的情况)并且精通 Python,请使用 Python。但是,如果这适用于万维网,我可能会选择 javascript,因为它是通用语(每个开发人员都知道它,而且很容易上手)。至于引擎……好吧,V8 会很好,但它不是 100% 线程安全的,因为您不能像 SpiderMonkey 那样以无锁方式在同一进程中运行多个引擎。所以你可能想要使用它。此外,由于默认情况下 javascript 是沙盒化的,因此您不必担心自己的实现太多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 2023-03-16
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2016-11-30
    • 2012-10-07
    • 1970-01-01
    相关资源
    最近更新 更多