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

上下文 - 如果你想直接切入主题,请跳过此部分

我一直在使用 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 项列表的情况,我应该期望什么样的性能?

点赞
用户4110032
用户4110032

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

  • 运行代码的 docker 容器,我建议你查看 codecube.io,它可以完全满足你的需求,你可以在此了解更多关于该过程的信息 here
  • 使用 libsandbox libraries,但目前文档比较差
  • PyPy 的沙盒化
2015-01-25 14:25:01
用户12285907
用户12285907

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

它受范围大小和节点评估步骤数的限制,并且保护免于无限循环、堆栈溢出和过度内存使用。

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

我专门制作了这个项目,因为我有相同的要求。

2019-10-28 13:11:12