【问题标题】:Secure plugin system for python applicationpython应用程序的安全插件系统
【发布时间】:2010-10-28 20:11:01
【问题描述】:

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

【问题讨论】:

  • “破解应用程序”是什么意思?您是否担心“恶意”用户?请为下载、安装的人提供一些用例,然后——什么? -- 破坏他们下载的应用程序?请更详细地解释这种情况。

标签: python plugins signing


【解决方案1】:

有没有办法保护这个系统?

答案是“视情况而定”。

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

我的一个朋友正在为一名编程竞赛评委工作:该程序在一些测试数据上运行用户提交的程序,并将其输出与参考输出进行比较。这该死的很难保证:您想运行其他人的代码,但又不想让他们运行任意代码。您的情况与此有些相似吗?那么答案就是“很难”。

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

您是否希望用户编写插件,而不能修改应用程序中的主体代码?考虑到用户可以反编译 .pyc 文件并对其进行修改。假设那些运行你的代码的人总是可以修改它,并考虑一下魔兽世界的淘金机器人。

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

如果您所担心的只是恶意人员修改在中间管中传输的代码,那么存在标准的加密解决方案 (SSL)。如果您只想加载已签名的插件(因为您想控制用户的操作?),签名代码听起来是正确的解决方案(但要注意编辑 .pyc 文件并禁用 is-it- 的狡猾用户或邪恶的人签名支票)。

【讨论】:

    【解决方案2】:

    也许像 http://chandlerproject.org/Projects/MeTooCrypto 这样的加密库有助于构建临时解决方案。用法示例:http://tdilshod.livejournal.com/38040.html

    【讨论】:

      猜你喜欢
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      相关资源
      最近更新 更多