2

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

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

3 回答 3

2

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

  1. 编辑 CPython 源代码并删除您不想要的东西 - 为所有这些东西提供模拟方法。非常容易出错并且很难做到。这是Google App Engine 的做法。
  2. 使用受限制的 Python。但是,使用它您无法阻止用户耗尽可用内存或运行无限吃所有 CPU 循环。
  3. 使用另一个 python 实现。PyPy 有一个可以使用的沙盒模式。Jython在 java 下运行,我猜 java 可以被沙盒化。
于 2010-01-05T12:49:10.603 回答
0

也许会有所帮助。您提供了一个关于如何使用 ast 的示例。

于 2010-01-05T12:57:29.857 回答
0

你想要什么运行Python 版本的App Engine的 Google 的Unladen Swallow项目。

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

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

OT:游戏通常会嵌入 LUA 来编写脚本,也许你应该检查一下。

于 2014-04-29T12:52:54.017 回答