6

我正在尝试设置 Python 沙箱并希望禁止访问标准和文件 I/O。我正在运行的 Python 服务器中运行沙箱。

我已经看过像RestrictedPython和这样的模块PyPy;但是,我希望能够在我正在运行的 Python 服务器中编译沙箱代码,而不是通过外部进程。

是否有任何替代方法可以防止访问诸如printraw_input或之类的命令open?上述模块是否可以用于在运行的 Python 程序中编译沙箱代码的方式?

在最坏的情况下,您将如何阻止访问raw_input

编辑:根据这个关于安全评估 Python 代码的教程,是否可以传入一个经过操作的内置模块?

4

1 回答 1

5

对此的粗略共识是,CPython 的复杂性和自省能力使得将解释器的某些部分列入黑名单的尝试是不可靠的。我相信主要尝试之一是 tav 的safelite导致 CPython 崩溃也不是那么难,这为运行任意代码开辟了另一条路径。避免来自任意代码的资源耗尽或 CPU 使用 DoS 可能不可能在进程内进行(您需要看门狗、系统限制等)。

对于希望在 Python 中执行沙盒代码的人来说,关键是避免自己滚动(或简单地修改sys, __builtins__):很容易说服自己它是坚如磐石的,但却错过了一些绕过保护的明显解决方法。请记住,Python 曾经包含一个提供这种保护的模块,甚至存在明显的问题,可以逃脱其限制。IIRC,它很容易将非受限对象(通过内省)钓鱼到受限环境中。

也就是说,pysandbox是由一位核心 Python 开发人员编写的,他认为它在限制例如 IO 时是安全的(并且它结合了许多以前的研究)并且可以像你想要的那样在进程内运行(尽管有一些更少的功能,比如 DoS CPU 和内存使用的保护)。

于 2012-04-22T21:19:39.493 回答