6

有安全的 Python 解释器吗?

想象一下你可以在你的机器上运行的 Python VM,它限制了操作。没有文件可以打开,没有系统调用等。它只是将标准输入转换为标准输出,可能是文本处理+数学等。

这样安全的 Python VM 存在吗?

4

8 回答 8

7

我知道没有这种公开分发的“安全解释器”(显然谷歌有一个它在 App Engine 中使用,尽管与您想要的限制有些不同,例如,某些文件可以以只读方式打开) . 但是,有一些声明,例如here,尽管我无法验证它们。 鉴于 pypy开发团队的高品质和声誉(他们极不可能提出未经证实的声明),Pypy 的沙盒中的Python可能是最值得尝试的。

于 2009-11-08T01:28:05.273 回答
2

您可以使用 SecurityManager 在 JVM 上运行 Jython,它允许您指定允许/不允许的操作。

于 2009-11-08T02:38:31.233 回答
2

在某种意义上,您不需要修改过的 Python 来限制执行。只需查看codepad.org,一个可以粘贴代码(使用 Python 和其他语言)并让它运行并显示输出的 pastebin。代码在非常受限的环境中运行,但这只是操作系统配置。(示例粘贴

于 2009-11-08T09:52:40.730 回答
1

您可以在具有受限权限的 .NET 应用程序域中运行 IronPython。

这肯定会在 Windows 中工作,并且可能/可能在 Mono 中(我真的不能说)。

您需要编写一个嵌入 IronPython 解释器并将脚本传递给它的小程序。

Iron Python in Action一书中关于嵌入的章节中的第一个示例展示了编写这样的启动器。

我不记得它是否涵盖 appdomains,但该信息应该在网络上的某个地方。

于 2009-11-08T02:08:27.097 回答
1

我是一名本科生,在第一年,我们学习了 Python。我们有这些被称为“CodeLabs”的东西,必须定期提交。它的工作原理是提出一个问题并要求学生将他们的答案输入到一个文本框中,然后在一些测试用例上运行该代码并检查它们的返回值

有一天,codelabs 网站 (turingscraft.com) 变得无法访问,因为有人决定运行一个无休止的 while 循环并在其中调用 os.fork()。

对于 turingscraft.com 的管理员来说,这显然是个问题。然而,他们后来找到了一种限制学生访问此类命令的方法。

如果我是你,我会查找有关他们网站的信息。也许他们发布了一些关于这个以及如何解决它的信息

于 2009-11-08T03:25:31.577 回答
0

您总是可以访问源代码并制作您自己的 Python 风格。如果有足够多的人需要它,那么它很快就会启动并运行。

于 2009-11-08T16:38:31.783 回答
-1

我最近一直在玩这个。我的要求包括 Python 3.x,它立即将 Jython 和 IronPython 等解决方案从桌面上移除。无论如何,我都会犹豫选择这条路线,因为我从不信任用户模式语言虚拟机。

既然如此,就我的目的而言,迄今为止最好的解决方案是将它完全从解释器手中拿走,并在一个高度锁定的容器(OpenVZ 或类似容器)中运行。然而,这是解决问题的方法(尽管不是完全虚拟化的大锤),如果您必须运行大量独立的解释器,则可能不可行。

不过,一个好处是,因为它不依赖于任何特定解释器的安全性,你可以在环境中使用任何你想要的任意语言——你不必将自己绑定到 Python 或一组语言/可用于 JVM 或 .NET/Mono 的实现。

于 2009-11-08T03:23:27.710 回答
-1

安全性不是操作系统的更多工作吗?

我的意思是,创建一个对文件等具有受限访问权限的用户。然后让虚拟机仅以这些权限运行。

或者我在胡说八道。我不是系统管理员或安全专家,但我倾向于使用为其设计的工具来做事。

于 2010-02-06T22:38:33.103 回答