是否有一个“安全”的Python子集用作嵌入式脚本语言?

时间:2009-05-14 06:37:43

标签: python security scripting scripting-language embedded-language

在我创建的许多Python应用程序中,我经常创建简单的模块,只包含用作配置文件的常量。另外,因为配置文件实际上是一个Python代码文件,所以我可以添加简单的逻辑来根据调试级别更改变量等。

虽然这对于内部应用程序非常有用,但我会谨慎地将这些应用程序发布到野外,因为担心会有人意外或恶意地向文件中添加破坏性代码。使用Python作为嵌入式脚本语言也是如此。

是否有一个被认为是“安全”嵌入的Python子集?我意识到它的安全性是相当主观的。但是,Java Applet和Flash都安全地定义了它们的安全沙箱。我想知道是否有一个类似规则的Python版本?

编辑:我问的不是因为配置文件方法,而是因为我有兴趣将一些脚本/插件机制实现到一个较新的应用程序而不想要一个插件或脚本,以便,例如,删除文件。这超出了应用程序应该能够做的范围。

13 个答案:

答案 0 :(得分:8)

以下是一些链接,可以帮助您了解您遇到的问题:

http://code.google.com/p/sandbox-python/

还有一个死的Google代码项目

答案 1 :(得分:3)

pypy项目提供沙盒功能,请参阅http://doc.pypy.org/en/latest/sandbox.html

答案 2 :(得分:3)

没有没有生产就绪的Python子集是“安全的”。 Python有一些沙箱模块由于缺陷而被弃用。

您最好的办法是创建自己的解析器,或者使用系统调用挂钩和监禁帐户隔离python进程。

有些人可能会指向PyPy,但它很慢且未完成。

答案 3 :(得分:3)

如果您需要做的只是设置简单变量,循环,条件和函数,PyMite VM符合要求。 PyMite很小,用C语言编写,使用静态内存池并可以嵌入。它具有极其有限的内置函数集,易于配置。同样,唯一的标准库是string,dict,list和sys的部分实现。 PyMite VM是python-on-a-chip项目的一部分,因此它被设计为在微控制器上运行,但可以在posix风格的桌面系统上运行。缺点是PyMite没有像其他Python实现那样广泛地去除错误。

答案 4 :(得分:2)

tinypy(tinypy.org)被认为是一个以Lua风格编写的小型嵌入式Python子集。由于lua有一种创建沙盒的方式,我估计可以沿着相同的方向被黑客攻击。由于tinypy的代码库非常小,所以很容易学习并找出如何根据需要改变现状。

答案 5 :(得分:1)

AFAIK,有些尝试是在标准的python库中进行的,但是没有成功。有关详细信息,请参阅Restricted Execution

  

警告

     

在Python 2.3中,这些模块已经存在   由于各种已知而没有禁用   容易安装的安全漏洞。该   模块仍在此处记录   帮助阅读使用该代码的旧代码   rexec和Bastion模块。

答案 6 :(得分:1)

  

我对发布这样的事情很谨慎   因害怕而进入野外的应用   有人不小心,或   恶意地添加破坏性代码   到文件。

你的“在野外”的本机代码同样容易受到这种攻击;它在机器代码中只是一个减速带,没有安全性。

如果您非常偏执并想要​​更高的速度提醒,您可以使托管脚本实例的本机应用程序检查内容的哈希值。然后改变是不可能的;只有经过深思熟虑的更改才会导致更新校验和的麻烦。您可以进一步检查他们是否也使用公钥签名;然后只有黑客你的原生应用程序可以让新脚本。

但沙盒?别担心!

答案 7 :(得分:1)

您可以尝试在Silverlight / Moonlight上使用IronPython,因为these guys令人印象深刻。 Resolver One开发人员here提供了很多关于这些类型的IronPython应用程序的重要信息。

答案 8 :(得分:1)

我对Java虚拟机或.NET运行时中确切的安全功能并不是很了解,但您可能需要考虑使用JythonIronPython运行您的python代码可能会让你获得额外的安全性。

答案 9 :(得分:1)

有点难以理解你想要做什么 - 没有足够的细节。

您是否托管本机应用并允许用户编写插件?考虑使用操作系统级解决方案,将Python应用程序作为jail / chroot /类似内部的单独运行时进程运行,并通过套接字进行通信。

您是否希望您的客户托管本机应用并让“不受信任的各方”编写插件?有没有理由上面的解决方案不起作用? (例如,客户希望在没有这些选项的奇怪操作系统上部署...)

您是否希望相同的人能够托管本机应用和“不受信任的脚本”并希望保护自己免受攻击?从保护他们写“os.remove”并让它做他们写的东西的意义上讲?你能解释一下原因吗?

请注意,如果没有更严格的约束(最大CPU周期,最大内存,内存所有权问题......),单独使用沙盒通常是不够的?你想要阻止什么样的恶意?请注意,在这里,操作系统也具有很好的功能(优先级,查杀进程,ulimits),并非所有沙盒环境都能复制 - 并且肯定比操作系统中的内容安全性测试更少。 (在我相信PyPy不让恶意编码器占用无限量的内存之前,我相信Linux不会有可破坏的ulimit,因为Linux已经受到了更多的攻击。)

答案 10 :(得分:0)

答案 11 :(得分:0)

这听起来像你想要的:Reviving Python restricted mode

Python解释器具有内置的“受限”模式,通过更改__builtins__魔术变量来启用。文章Paving the Way to Securing the Python Interpreter更详细地解释了这个技巧。请注意,要完全工作,它需要Python intrepreter的补丁;我不知道它是否已被应用。

对于纯python概念验证,请参阅他之前的帖子A Challenge To Break Python Security

答案 12 :(得分:0)

starlark是go中实现的Python的子集。

它被Google用作其构建工具Bazel的配置语言。令人沮丧的是,关于它的文档/详细信息很少,但是也许符合要求。