如何创建一个受限的Python环境?

4 投票
5 回答
1458 浏览
提问于 2025-04-15 11:21

我负责开发一个大型的Python/Windows/Excel应用程序,这个程序被一家全球各地都有办公室的金融机构使用。最近,某个国家的法规发生了变化,因此我们被告知需要创建一个“锁定版”的分发版本。

在和我国外的同事进行了一些令人沮丧的交流后,他们似乎担心有人可能会在他们的电脑上滥用Python解释器,生成一些非标准的应用程序,从而绕过安全措施。

我最初的建议是直接取消python.exe和pythonw.exe的执行权限:我们的应用程序作为Excel插件工作,只使用Python的DLL文件。那些exe文件实际上并不会被使用。

但我的同事仍然担心有人可能会调用Python的DLL——比如黑客可以利用“exec”这个功能,从其他编程语言或虚拟机中调用Windows DLL中的函数,比如VBA。

我们能做些什么来防止我们想要安装的DLL被滥用呢?到这时我已经没有更多的想法了。我需要找到一种方法,确保Python只运行我们授权的程序。

当然,这个问题有点荒谬:因为这些电脑上都有Excel和Word,所以它们都支持VBA,而VBA是一种众所周知的脚本语言,其功能在某种程度上与Python相当。

显然,担心Python是没有意义的,因为Excel的VBA是完全开放的,但这涉及到公司内部的政治,而我们团队提议使用Python,所以我们需要证明我们的东西可以做到相对安全。

5 个回答

3

一个想法是在.NET环境中运行IronPython,具体是在一个叫做AppDomain的地方。你可以看看David W.的评论,了解更多信息这里

另外,有一个模块可以导入,用来限制解释器写文件的能力。这个模块叫做safelite

你可以使用这个模块,并且可以指出,甚至连Python的创造者都无法破解这个模块的安全性!而且他尝试了不止两次。

我知道你担心的安全问题不仅仅是写文件。但你被要求做的事情真的很愚蠢,所以希望提问的人看到“安全的Python”后会感到满意。

3

很遗憾,Python在安全性方面做得并不好,这一点大家都知道。因为Python是动态语言,加上它对操作系统功能的封装很薄,所以很难做到完全的安全。通常,最好的办法是确保运行这个应用的用户权限有限,但我想这在实际操作中可能不太可行。另一个选择是把它放在虚拟机里,这样可能造成的损害至少会限制在这个虚拟环境内。

如果这些方法都不行的话,懂得Python C API的人可以为你制作一个专门的.dll文件,这个文件可以明确限制特定Python解释器的功能,比如控制导入的模块和文件写入等。不过,这样做需要仔细检查你需要哪些功能,不需要哪些功能,并且在完成后还要进行全面的测试。

9

这里的“相对安全”是随便定义的,意思是“比Excel和VBA更安全”。

你无法赢得这个争论,因为争论的方向是错的。任何人都可以使用任何EXE或DLL文件。

你需要重新定义“锁定”的意思,换个方式让你能成功。

你可以把“锁定”定义为“不能更改.PY文件”或者“我们可以审计所有对.PY文件的更改”。如果你把讨论的重点放在你能控制的事情上,你就有小小的胜算。

获取相关的规定,不要相信别人为你解读这些规定。

一定要清楚规定的要求,不要听信别人的解释。

撰写回答