有没有适合嵌入式脚本语言的“安全”Python子集?
在我创建的许多Python应用程序中,我经常会做一些简单的模块,这些模块里只包含一些常量,用作配置文件。此外,因为配置文件实际上是一个Python代码文件,所以我可以根据调试级别等情况,添加一些简单的逻辑来改变变量。
虽然这种方法在内部应用中效果很好,但我对将这样的应用发布到外部有些担心,因为我怕有人会不小心或者故意在文件里添加破坏性代码。对于将Python作为嵌入式脚本语言使用,情况也是一样。
有没有一种被认为是“安全”的Python子集可以用来嵌入呢?我知道安全性这个问题比较主观。不过,Java小程序和Flash都有明确的安全沙箱。我在想,Python是否有类似的规则?
编辑:我问这个问题并不是因为配置文件的方式,而是因为我想在一个新应用中实现一些脚本或插件机制,不希望插件或脚本能够,比如说,删除文件。这超出了应用程序应该能做的范围。
13 个回答
4
不,Python没有一个可以安全使用的、适合生产环境的子集。之前有一些沙盒模块,但因为存在问题而被淘汰了。
最好的办法是自己创建一个解析器,或者通过系统调用钩子和一个受限制的账户来隔离Python进程。
有些人可能会提到PyPy,但它还没有完成。
4
pypy项目提供了沙箱功能,具体内容可以查看这个链接:http://doc.pypy.org/en/latest/sandbox.html。
10
这里有几个链接,可以让你了解你面临的挑战:
- 如何安全地运行不可信的Python脚本(也就是沙箱)
- Python的能力? 这是Guido自己写的
还有一个已经停止更新的谷歌代码项目,地址是 http://code.google.com/p/sandbox-python/