Python,安全,沙箱

17 投票
9 回答
10579 浏览
提问于 2025-04-16 03:59

我想做一个网站,让大家可以上传他们的Python脚本。当然,我希望能运行这些脚本,让它们做一些有趣的事情。不过,问题是,有些人可能会上传会对我的服务器造成伤害的脚本,我想要防止这种情况发生。有没有什么办法可以运行这些任意的脚本,而不会对我的系统造成伤害,实际上是完全看不到我的系统?谢谢!

9 个回答

3

现在有很多网络服务器在运行不可信的Python代码:

你可能想看看他们是怎么解决这些问题的。

或者你也可以考虑另一种方法:

  • http://pyjs.org/ - pyjamas - Python转JavaScript的编译器(在客户端运行,把安全问题转移到他们那边)
4

我不太清楚早期版本的情况,但在Python 3中,你可以通过types.FunctionType来创建可以访问自定义范围的函数。

def f():
  return __builtins__

f() # this will work because it has access to __builtins__
scope = {}
sandboxed = FunctionType(f.__code__,scope)
sandboxed()  # will throw NameError, builtins is not defined

返回的这个函数只能访问你在范围字典中提供的内容。我在想,是否还有其他方法可以绕过这个限制。

5

“这事儿做不了。”

运行一些不可信的脚本而又保持安全,这两者是矛盾的。你可能需要使用一些特别的技术,比如定制内核、监狱环境(jails)、虚拟机(vms)等等。

你可以看看 http://codepad.org/about 是怎么做的,这可是一项非常庞大的工作。

撰写回答