【发布时间】: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