限制嵌入式 python 实例的功能

发布于 2024-08-17 00:45:29 字数 202 浏览 15 评论 0原文

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

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

Is there a way to limit the abilities of python scripts running under an embedded interpretor? Specifically I wish to prevent the scripts from doing things like the following:

  • Importing python extension modules (ie .pyd modules), except those specifically allowed by the application.
  • Manipulating processes in any way (ie starting new processes, or terminating the application).
  • Any kind of networking.
  • Manipulating the file system (eg creating, modifying and deleting files).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

待天淡蓝洁白时 2024-08-24 00:45:29

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

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

No. There's no easy way to prevent those things on CPython. Your options are:

  1. Edit CPython source code and remove things you don't want - provide mocking methods for all those things. Very error-prone and hard to do. This is the approach of Google's App Engine.
  2. Use Restricted Python. However, with it you can't prevent your user from exhausting the memory available or running infinite eat-all-cpu loops.
  3. Use another python implementation. PyPy has a sandbox mode you can use. Jython runs under java and I guess java can be sandboxed.
琉璃梦幻 2024-08-24 00:45:29

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

Maybe this can be helpful. You have an example provided on how to work with the ast.

海的爱人是光 2024-08-24 00:45:29

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

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

我想指出的是,这使得该系统几乎毫无用处。对于任何比另一个 [App Engine] 应用程序更酷的东西来说毫无用处。忘记猴子修补系统模块,甚至对自己的堆栈的访问也受到限制。完全不动态。

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

What you want it Google's Unladen Swallow project that Python version of App Engine runs on.

Modules are severely restricted, ctypes are not allowed, sockets are matched against some policy or other, in other words you get a sandboxed version of Python, in line with their Java offering.

I'd like to point out that this makes the system almost useless. Well useless for anything cooler than yet another [App Engine] App. Forget monkey-patching system modules, and even access to own stack is restricted. Totally un-dynamic-like.

OT: games typically embed LUA for scripting, perhaps you should check it out.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文