【发布时间】:2015-03-06 16:22:40
【问题描述】:
# 上下文 -- 如果你想直截了当,请跳过
我一直在用 Python (Bottle/gevent/MongoDB) 构建一个相当复杂的 Web 应用程序。这是一个 RSVP 系统,它允许多个带有注册表单的独立前端实例以及具有精细用户权限的后端访问(这些用户是我们的客户)。我现在需要实现一个灵活的 map-reduce 引擎来收集注册数据的统计信息。因为收集的数据因实例而异,所以不可能有一个万能的解决方案。我还想为我们更倾向于技术的客户保持开放。
# 上下文结束
所以我需要执行通过 Web 界面输入的任意代码字符串(某种临时插件 - 语言无关紧要)。我已经了解到,对 Python 进行正确的沙箱处理几乎是不可能的,所以这是没有选择的。
到目前为止,我已经查看了 Lua,发现了 Lupa、Lunatic Python 和 Lupy,但它们都允许访问 Python 运行时的部分内容。
还有PyExecJS 及其各种运行时(V8、Node、SpiderMonkey),但我不知道它是否会带来任何安全风险。
问题:
1. 有人知道另一个(更合适的)选项吗?
2. 致那些熟悉任何 Lua 绑定的人:有没有可能让它们完全安全而没有太多麻烦?
3. 对于熟悉 PyExecJS 的人:它有多安全?另外,我应该期望什么样的性能,比如调用一个简短的映射函数 1000 次,然后迭代一个 1000 项列表?
【问题讨论】:
-
是否需要使用python?仅使用 lua 并从 vm 环境中删除“危险”功能怎么样?这个问题也可能与stackoverflow.com/questions/17454263/…有关。
-
@greatwolf 不受信任的代码可以是任何合适的语言。感谢您的链接,但我无法尝试,因为 Lupa 仍然拒绝安装在我的开发机器上。我采用了 JS 方式,它已经可以工作,但存在重大安全问题。