限制嵌入式Python实例的功能
有没有办法限制在嵌入式解释器下运行的Python脚本的功能?具体来说,我想防止这些脚本做以下事情:
- 导入Python扩展模块(比如.pyd模块),除了那些应用程序特别允许的模块。
- 以任何方式操作进程(比如启动新进程或终止应用程序)。
- 进行任何网络操作。
- 操作文件系统(例如创建、修改和删除文件)。
3 个回答
0
你想要的是谷歌的Unladen Swallow项目,这个项目是Python版本的App Engine所运行的。
在这个环境中,模块的使用受到很大限制,ctypes
是不允许的,套接字的使用也要遵循某些政策。换句话说,你得到的是一个被限制的Python版本,就像他们的Java产品一样。
我想指出的是,这样的系统几乎没什么用。对于比普通的[App Engine]应用更复杂的东西来说,简直是没用。忘掉对系统模块的修改吧,甚至连访问自己的调用栈都受到限制。完全没有动态的感觉。
题外话:游戏通常会嵌入LUA来进行脚本编写,也许你可以去了解一下。
0
也许这个链接对你有帮助。里面有一个关于如何使用ast的例子。
2
不可以。要在CPython上防止这些事情发生并没有简单的方法。你可以考虑以下几种选择:
- 修改CPython的源代码,去掉你不想要的部分 - 为所有这些东西提供模拟方法。这种方法非常容易出错,而且很难实现。这是谷歌的App Engine所采用的方式。
- 使用Restricted Python。不过,使用这个工具你无法阻止用户耗尽可用内存或运行无限循环占用所有CPU。
- 使用其他的Python实现。PyPy有一个沙盒模式可以使用。Jython是在Java下运行的,我想Java可以被沙盒化。