6

在 Python 中实现“沙盒”环境通常是通过 rexec 模块 ( http://docs.python.org/library/rexec.html ) 完成的。不幸的是,由于一些安全漏洞,它已被弃用/删除。有替代方案吗?

我的目标是让 Python 代码执行半可信的 Python 脚本。在一个完美的世界中,对预定义集合之外的任何函数的调用都会引发异常。从我读到的关于 rexec 的弃用的内容来看,这可能是不可能的。所以我会尽量满足。我可以生成一个单独的进程来运行脚本,这很有帮助。但他们仍然可以滥用 I/O 或处理器/内存资源。

4

3 回答 3

4

您可能希望提供自己的__import__以防止包含您认为“滥用 I/O 或处理器/内存资源”的任何模块。

您可能希望从pypy开始,并创建自己的解释器,但对资源使用有限制和约束。

于 2009-02-08T03:18:33.950 回答
2

出于安全原因,在cpython“沙盒”中是: 不要在你的公司孩子这样做”-thing

尝试 :

  • 带有java“沙盒”的jython
  • pypy -> 见答案 S.Lott
  • 也许 Ironpython 有解决方案?

警告

警告

在 Python 2.3 中,由于各种已知且不易修复的安全漏洞,这些模块已被禁用。这些模块仍然记录在此处,以帮助阅读使用 rexec 和 Bastion 模块的旧代码。

于 2009-02-08T09:51:57.230 回答
1

cPython 中安全性的最佳选择是使用操作系统级别的沙盒机制,并在受操作系统约束的单独进程中运行不受信任的代码。

根据上面的答案,这相当于使用'jython with java "sandboxing"',但配置起来可能有点困难。

于 2017-12-08T18:32:34.547 回答