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

2024-09-29 01:28:12 发布

您现在位置:Python中文网/ 问答频道 /正文

#Context—如果您想直奔主题,请跳过
我一直在用Python(Bottle/gevent/MongoDB)构建一个相当复杂的web应用程序。它是一个RSVP系统,它允许多个独立的前端实例使用注册表单als,以及具有细粒度用户权限的后端访问(这些用户是我们的客户机)。我现在需要实现一个灵活的map reduce引擎来收集注册数据的统计信息。由于收集的数据因实例而异,因此不可能采用一刀切的解决方案。我也希望为我们更倾向于技术的客户保持开放。
#上下文结束

所以我需要执行通过web界面输入的任意字符串代码(某种特殊的插件语言并不重要)。我已经了解到,对Python进行适当的沙盒实际上是不可能的,所以这是没有选择的。在

到目前为止,我已经研究了Lua,发现了Lupa、疯狂的Python和Lupy,但是它们都允许访问Python运行时的部分内容。在

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

问题:
1有人知道另一个(更合适)的选择吗?
2对于那些熟悉Lua绑定的人来说:有没有可能让它们完全安全而无需太多麻烦?
三。对于那些熟悉PyExecJS的人来说:它有多安全?另外,我应该期望什么样的性能,比如说,调用一个短映射函数1000次,然后在1000项列表上迭代?在


Tags: 数据实例用户web应用程序bottle主题注册表
2条回答

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

它受作用域大小和节点求值步骤数的限制,并可防止无限循环、堆栈溢出和过度内存使用。在

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

我做这个项目是因为我有同样的要求。在

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

  • 运行代码的docker容器,我建议检查编解码器.io结果,它完全符合您的需要,您可以进一步了解流程here
  • 使用libsandbox libraries,但目前的文档相当糟糕
  • 皮比的沙盒

相关问题 更多 >