Skip to main content
 首页 » 编程设计

python之用于 python 应用程序的安全插件系统

2024年08月12日42jackei

我有一个用 python 编写的应用程序。我为使用 egg 文件的应用程序创建了一个插件系统。 Egg 文件包含已编译的 Python 文件,可以轻松反编译并用于破解应用程序。有没有办法保护这个系统?我想为此使用数字签名 - 签署这些 egg 文件并在加载此类 egg 文件之前检查签名。有没有办法从 python 以编程方式执行此操作?也许使用 winapi?

请您参考如下方法:

Is there a way to secure this system?

答案是“视情况而定”。

您应该问的两个问题是“人们应该能够做什么”和“人们能够做什么(对于给定的实现)”。如果存在后者是前者子集的实现,则系统可以得到保护。

我的一个 friend 正在做一个编程竞赛评委:一个程序在一些测试数据上运行用户提交的程序,并将其输出与引用输出进行比较。这太难保证了:你想运行其他人的代码,但又不想让他们运行任意代码。您的场景是否与此有些相似?那么答案就是“难”。

您是否希望用户从网络上下载不可信的代码并在保证它不会破坏他们的机器的情况下运行它?然后看看各种网络语言。一种解决方案是不提供对系统调用的访问 (JavaScript) 或提供对某些潜在危险调用的有限访问(Java 的 SecurityManager)。据我所知,它们都不能在 python 中完成,但你总是可以破解解释器并禁止加载不在某些白名单上的外部模块。这可能容易出错。

您是否希望用户编写插件,而不能修改应用程序中主要代码的作用?考虑到用户可以反编译 .pyc 文件并修改它们。假设运行您的代码的人可以随时修改它,并考虑 WoW 的淘金机器人。

一种仅限 Linux 的解决方案,类似于沙盒网络模型,是使用 AppArmor,它限制您的应用程序可以访问哪些文件以及它可以进行哪些系统调用。这可能是一个可行的解决方案,但我对此了解不多,所以除了“调查”之外我无法给你建议。

如果您只担心坏人在管间传输过程中修改代码,那么可以使用标准加密解决方案 (SSL)。如果你只想加载签名的插件(因为你想控制用户做什么?),签名代码听起来像是正确的解决方案(但要小心狡猾的用户或编辑 .pyc 文件并禁用 is-it-签名支票)。