我需要在Web应用程序中运行不受信任的服务器端代码 - 我有哪些选择?

时间:2015-01-08 14:08:59

标签: python lua eval sandbox

#Context - 如果你想要正确的话,请跳过 我一直在用Python(Bottle / gevent / MongoDB)构建一个相当复杂的Web应用程序。它是一个RSVP系统,它允许几个独立的前端实例和注册表单以及具有细粒度用户权限的后端访问(这些用户是我们的客户端)。我现在需要实现灵活的map-reduce引擎来收集有关注册数据的统计信息。由于收集的数据因实例而异,因此无法实现一刀切的解决方案。我也希望对我们技术倾向较大的客户保持开放态度 #上下文结束

所以我需要执行通过Web界面输入的任意代码串(某种ad-hoc插件 - 语言无关紧要)。我已经知道,对Python进行正确的沙盒化几乎是不可能的,因此没有选择。

截至目前,我已经查看了Lua并找到了Lupa,Lunatic Python和Lupy,但是这三个都允许访问Python运行时的部分内容。

还有PyExecJS及其各种运行时(V8,Node,SpiderMonkey),但我不知道它是否会带来任何安全风险。

问题:
1.有没有人知道另一个(更合适)的选择? 2.对那些熟悉任何Lua绑定的人:是否可以在没有太多麻烦的情况下使它们完全安全? 3.熟悉PyExecJS的人:它有多安全?此外,我应该期待什么样的性能,比如,调用短映射函数1000次然后迭代1000项列表?

2 个答案:

答案 0 :(得分:0)

以下是运行不受信任代码的几种方法:

  • 运行代码的docker容器,我建议检查codecube.io,它完全符合您的要求,您可以了解有关该过程的更多信息here
  • 使用libsandbox libraries,但目前文档非常糟糕
  • PyPy的沙盒

答案 1 :(得分:0)

Sneklang是Python的严格子集,可以在您提供的范围内进行安全评估。

它受作用域大小和节点评估步骤数的限制,并可以防止无限循环,堆栈溢出和过多的内存使用。

还有一个在线沙箱:https://sneklang.functup.com

我之所以制定这个项目,是因为我有相同的要求。