限制嵌入式python实例的功能

时间:2010-01-05 12:16:52

标签: python c cpython python-embedding

有没有办法限制在嵌入式解释器下运行的python脚本的功能?具体来说,我希望阻止脚本执行以下操作:

  • 导入python扩展模块(即.pyd模块),但应用程序特别允许的除外。
  • 以任何方式操作流程(即启动新流程或终止应用程序)。
  • 任何类型的网络。
  • 操作文件系统(例如,创建,修改和删除文件)。

3 个答案:

答案 0 :(得分:2)

没有。在CPython上没有简单的方法来阻止这些事情。您的选择是:

  1. 编辑CPython源代码并删除您不想要的东西 - 为所有这些提供模拟方法。非常容易出错,很难做到。这是Google App Engine的方法。
  2. 使用Restricted Python。但是,有了它,你无法阻止你的用户耗尽可用的内存或运行无限的eat-all-cpu循环。
  3. 使用另一个python实现。 PyPy有sandbox mode你可以使用。 Jython在java下运行,我猜java可以沙盒化。

答案 1 :(得分:0)

也许this可能会有所帮助。您有一个如何使用ast的示例。

答案 2 :(得分:0)

您希望Google的Unladen Swallow项目运行在App Engine的Python版本上。

模块受到严格限制,不允许ctypes,套接字与某些策略或其他策略匹配,换句话说,您将获得符合其Java产品版本的沙盒版本的Python。

我想指出这会使系统几乎无用。对于任何比另一个[App Engine]应用程序更酷的东西都没用。忘记猴子修补系统模块,甚至限制访问自己的堆栈。完全不像动态一样。

OT:游戏通常将LUA嵌入脚本中,也许你应该检查一下。