是否有一个“问题”;“安全”;作为嵌入式脚本语言使用的Python子集?
在我创建的许多Python应用程序中,我经常创建只包含常量的简单模块作为配置文件。此外,由于配置文件实际上是一个Python代码文件,因此我可以添加简单的逻辑,根据调试级别等更改变量 虽然这对内部应用程序非常有效,但我还是要小心将此类应用程序发布到野外,以免有人意外或恶意地将破坏性代码添加到文件中。使用Python作为嵌入式脚本语言也是如此 是否有Python的一个子集被认为是用于嵌入的“安全”的?我意识到它的安全性是相当主观的。然而,Java小程序和Flash都有定义良好的安全沙箱。我想知道是否有一个版本的Python有类似的规则是否有一个“问题”;“安全”;作为嵌入式脚本语言使用的Python子集?,python,security,scripting,scripting-language,embedded-language,Python,Security,Scripting,Scripting Language,Embedded Language,在我创建的许多Python应用程序中,我经常创建只包含常量的简单模块作为配置文件。此外,由于配置文件实际上是一个Python代码文件,因此我可以添加简单的逻辑,根据调试级别等更改变量 虽然这对内部应用程序非常有效,但我还是要小心将此类应用程序发布到野外,以免有人意外或恶意地将破坏性代码添加到文件中。使用Python作为嵌入式脚本语言也是如此 是否有Python的一个子集被认为是用于嵌入的“安全”的?我意识到它的安全性是相当主观的。然而,Java小程序和Flash都有定义良好的安全沙箱。我想知道是
编辑:我的要求不是因为配置文件方法,而是因为我对在新应用程序中实现一些脚本/插件机制感兴趣,不希望插件或脚本能够(比如)删除文件。这超出了应用程序应该能够做到的范围。pypy项目提供了沙箱功能,请参阅。不,Python没有“安全”的生产就绪子集。Python有一些沙盒模块,由于缺陷而被弃用 最好的选择是创建自己的解析器,或者使用syscall钩子和一个被囚禁的帐户隔离python进程
有些人可能会将您指向PyPy,但它速度慢且未完成。好的,在标准python库中进行了一些尝试,但没有成功。有关详细信息,请参阅 警告 在Python2.3中,这些模块 由于各种已知和未知原因而禁用 容易修复的安全漏洞。这个 模块仍然记录在这里,以便 帮助阅读使用 rexec和堡垒模块
以下是几个链接,让您了解您面临的问题:
- 圭多本人
但是沙箱呢?别担心 您可以在Silverlight/Moonlight上尝试IronPython,这似乎令人印象深刻。关于这些类型的IronPython应用程序,Resolver One开发人员提供了大量信息。我对Java虚拟机或.NET运行时中的安全功能知之甚少,但是,您可能需要考虑是否运行Python代码,或者可能允许您添加安全性。 < P>讨论以前遇到的代码< ReXEC < /C> >模块:
这些都来自于。要理解你想做什么有点困难——没有足够的细节 您是否托管本机应用程序并允许用户编写插件?考虑使用OS级别的解决方案,将Python应用程序运行为监狱/科洛特/类似的单独运行时进程,并通过套接字进行通信。 您是否希望您的客户托管本机应用程序,并让“不受信任的方”编写插件?上述解决方案不起作用有什么原因吗?(例如,客户希望在没有此类选项的情况下在怪异的OSs上部署…) 您是否希望相同的人托管本机应用程序和“不受信任的脚本”,并希望保护他们不受自己的影响?从保护他们不写“os.remove”并让它做他们写的事情的意义上来说?你能解释一下原因吗
请注意,如果没有更严格的约束(最大CPU周期、最大内存、内存所有权问题……),仅使用沙箱通常是不够的?你想停止什么样的恶意?请注意,在这里,OSs也具有出色的功能(优先级、杀戮过程、ulimit),并非所有沙箱环境都能复制这些功能——而且安全测试肯定比OSs中的要少。(我相信Linux不会有可破坏的ulimit,而我相信PyPy不会让恶意程序员占用无限的内存,因为Linux在野外受到的攻击更多。)tinypy()是一个以Lua风格编写的小型可嵌入Python子集。由于lua有一种创建沙箱的方法,我估计tinypy也可能会被同样的方法攻击。由于tinypy的代码库非常小,因此很容易学习和了解如何改变内容以满足您的需要。如果您只需要设置简单的变量、循环、条件和函数,那么它就符合要求。PyMite很小,用C编写,使用静态内存池,可以嵌入。它的内置功能非常有限,易于配置。类似地,唯一的标准库是string、dict、list和sys的部分实现。PyMite虚拟机是python-on-a-chip项目的一部分,因此它被设计为在微控制器上运行,但可以在posix风格的桌面系统上运行。缺点是PyMite没有像其他Python实现那样广泛地消除bug。这听起来像是您想要的: 巨蟒