【发布时间】:2012-05-03 08:03:12
【问题描述】:
我正在尝试设置 Python 沙箱并希望禁止访问标准和文件 I/O。我正在运行的 Python 服务器中运行沙箱。
我已经看过像 RestrictedPython 和 PyPy 这样的模块;但是,我希望能够在我正在运行的 Python 服务器中编译沙箱代码,而不是通过外部进程。
是否有任何替代方法可以阻止对print、raw_input 或open 等命令的访问?上述模块能否用于在运行的 Python 程序中编译沙箱代码的方式?
在最坏的情况下,您将如何阻止对 raw_input 的访问?
编辑:根据this tutorial on safely evaluating Python code,是否可以传入经过操作的 builtins 模块?
【问题讨论】:
-
只有 PyPy 沙盒值得一试,其他的都是浪费时间。
-
你能描述一下沙盒到底应该运行什么吗?任意代码、应该评估为 Python 对象的用户输入等?您需要 DoS(CPU 使用率、内存耗尽)保护吗?是什么让分离的进程对您的用例不利(请记住,您通常可以轻松地在 Python 服务器上运行代码,向/从分离的沙盒进程发送和获取结果)?
-
沙箱应该运行来自用户输入的命令,主要是我上面提到的限制。这对我来说只是一个更简单的选择,因为我在对 eval/exec 的调用中更新了环境,并且在两个进程之间传递环境会更加困难。我一直在研究如何为命令的 exec/eval 设置内存限制,但无济于事。
-
请描述“命令”,最好使用示例代码。内存限制需要单独的进程或操作系统强制限制 AFAIK。
-
对不起。 “命令”是指您可以输入 Python shell 的任何内容,例如“x = [1,2,3]”或“map(
, - )”。这里正在解决施加内存限制的问题:stackoverflow.com/questions/10269974/…
标签: python file io sandbox pypy