我正在尝试设置 Python 沙箱并希望禁止访问标准和文件 I/O。我正在运行的 Python 服务器内运行沙箱。
我已经看过类似的模块RestrictedPython
and PyPy
;但是,我希望能够在正在运行的 Python 服务器内部编译沙箱代码,而不是通过外部进程。
是否有其他方法可以阻止访问命令,例如print
, raw_input
, or open
?上述模块能否以在运行的 Python 程序中编译沙箱代码的方式使用?
在最坏的情况下,您将如何阻止访问raw_input
?
编辑:根据本教程关于安全评估 Python 代码 http://lybniz2.sourceforge.net/safeeval.html,是否有可能传递一个被操纵的builtins module?
对此的粗略共识是,CPython 的复杂性和自省能力使得不可靠的尝试 http://mail.python.org/pipermail/python-dev/2012-March/117175.html将解释器的部分列入黑名单。我相信主要的尝试之一是 tav 的safelite http://tav.espians.com/a-challenge-to-break-python-security.html。这也不是那么难导致CPython崩溃 http://mail.python.org/pipermail/python-dev/2012-March/117339.html,这会打开另一条可用于运行任意代码的路径。在进程内避免任意代码的资源耗尽或 CPU 使用 DoS 可能是不可能的(您需要看门狗、系统限制等)。
对于想要在 Python 中执行沙盒代码的人来说,至关重要的是避免滚动自己的代码(或者简单地修改sys
, __builtins__
):很容易让自己相信它坚如磐石,但却错过了一些绕过保护的明显解决方法。请记住,Python 曾经包含一个提供此类保护的模块,但即使该模块也存在明显的问题,可以逃脱其限制。 IIRC,它很容易将非限制对象(通过内省)捕获到限制环境中。
也就是说,py沙箱 https://github.com/haypo/pysandbox由一位核心 Python 开发人员编写,他相信在限制时是安全的,例如IO(它包含了许多以前的研究)并且可以像您想要的那样在进程中运行(尽管功能较少,例如针对 CPU 和内存使用的 DoS 保护)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)