我正在尝试设置Python沙箱,并希望禁止访问标准和文件I / O.我在正在运行的Python服务器中运行沙箱。
我已经查看了RestrictedPython
和PyPy
等模块;但是,我希望能够在运行的Python服务器中编译沙箱代码,而不是通过外部进程。
是否有其他方法可以阻止访问print
,raw_input
或open
等命令?上述模块是否可以在正在运行的Python程序中编译沙箱代码的方式使用?
最糟糕的是,您如何阻止访问raw_input
?
编辑:根据this tutorial on safely evaluating Python code,是否可以传入受操纵的内置模块?
答案 0 :(得分:5)
对此的粗略共识是CPython的复杂性和内省能力使解释器的黑名单部分unreliable attempts成为可能。我相信其中一项主要尝试是tav safelite。 cause CPython to crash也不难,这开启了另一条可以从运行任意代码中利用的路径。从任意代码中避免资源耗尽或CPU使用DoS可能无法在进程中执行(您需要监视程序,系统限制等)。
对于想要在Python中使用沙盒代码执行的人来说,至关重要的是避免滚动自己(或简单地修改sys
,__builtins__
):很容易让自己相信它坚如磐石但又错过了一些明显的解决方法绕过了你的保护。请记住,Python过去常常包含一个提供这种保护的模块,甚至包含可以逃避限制的明显问题。 IIRC,很容易将非限制性物体(通过内省)捕捞到受限制的环境中。
也就是说,pysandbox是由核心Python开发人员编写的,他认为在限制例如安全时它是安全的。 IO(并且它包含了许多以前的研究)并且可以像你想要的那样在进程中运行(尽管有一些较少的功能,例如来自CPU和内存使用的DoS保护)。