30. 受限执行 — Python 文档

来自菜鸟教程
Python/docs/2.7/library/restricted
跳转至:导航、​搜索

30. 受限执行

警告

在 Python 2.3 中,由于各种已知且不易修复的安全漏洞,这些模块已被禁用。 这些模块仍然记录在此处以帮助阅读使用 rexecBastion 模块的旧代码。


受限执行是Python中的基本框架,它允许分离可信和不可信代码。 该框架基于以下概念:受信任的 Python 代码(supervisor)可以创建具有有限权限的“填充单元”(或环境),并在该单元中运行不受信任的代码。 不受信任的代码无法脱离其单元格,只能通过受信任代码定义和管理的接口与敏感的系统资源进行交互。 术语“受限执行”比“安全 Python”更受欢迎,因为真正的安全性很难定义,并且由受限环境的创建方式决定。 请注意,受限制的环境可以嵌套,内部单元格创建的子单元格具有较小但永远不会更大的特权。

Python 受限执行模型的一个有趣方面是呈现给不受信任代码的接口通常与呈现给受信任代码的接口具有相同的名称。 因此不需要学习特殊的接口来编写在受限环境中运行的代码。 并且由于填充单元的确切性质由监管者确定,因此可以根据应用施加不同的限制。 例如,不受信任的代码读取指定目录中的任何文件可能被认为是“安全的”,但永远不会写入文件。 在这种情况下,监管者可以重新定义内置的 open() 函数,以便在 mode 参数为 'w' 时引发异常。 它也可能对 filename 参数执行类似 chroot() 的操作,这样 root 总是相对于文件系统的某个安全“沙箱”区域。 在这种情况下,不受信任的代码仍然会在其环境中看到一个内置的 open() 函数,具有相同的调用接口。 语义也将相同,当主管确定正在使用不允许的参数时,会引发 IOErrors。

Python 运行时根据其全局变量中的 __builtins__ 对象的身份确定特定代码块是否在受限执行模式下执行:如果这是标准 __builtin__[ X235X]模块,代码视为不受限制,否则视为受限制。

在受限模式下执行的 Python 代码面临许多限制,旨在防止它从填充的单元格中逃逸。 例如,函数对象属性 func_globals 和类和实例对象属性 __dict__ 不可用。

两个模块提供了设置受限执行环境的框架:

也可以看看

圣杯主页
Grail 是一种用 Python 编写的 Internet 浏览器,它使用这些模块来支持 Python 小程序。 有关在 Grail 中使用 Python 的受限执行模式的更多信息,请访问该网站。