【问题标题】:Limiting the features of an embedded python instance限制嵌入式 python 实例的功能
【发布时间】:2011-01-01 15:08:08
【问题描述】:

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

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

【问题讨论】:

标签: python c cpython python-embedding


【解决方案1】:

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

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

【讨论】:

  • 好吧,我不担心脚本会导致应用程序崩溃/冻结,更多的是当恶意插件说从 Internet 下载并执行文件、更改系统设置等时。我想我可以编辑 CPython 实现,对于某些事情我猜只是不编译模块开始是合适的,如果我猜我可以挂钩模块加载器以检查安全 pyd 模块的白名单。是否有任何关于从 python 编译中简单地删除模块/对象的信息?
【解决方案2】:

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

【讨论】:

  • "ACCESS DENIED",我真的很讨厌大学的互联网限制……我回家后会检查这个。
【解决方案3】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多