【问题标题】:How to protect mysqldb connection in python?如何保护python中的mysqldb连接?
【发布时间】:2014-09-20 18:07:20
【问题描述】:

我正在创建一个 pygtk 应用程序,它需要来自远程数据库的 mysql 连接。

db = MySQLdb.connect("remotehost","username","password","databse", charset='utf8')

应用程序即将完成并即将发布。但问题是,如果有人反编译此脚本,他们可以轻松读取上述凭据,然后就会出现安全问题。那么我该如何保护这个代码或者有什么方法可以强编译这个文件呢?

【问题讨论】:

  • 确保该数据库中的用户只有他需要操作的最小权限。例如,不要让他删除您的数据库。如果应用不需要写入或删除权限 - 不要授予它们。
  • 感谢您的好方法。

标签: python mysql pygtk mysql-python


【解决方案1】:

出于多种原因,数据库连接通常由受信任网络中的受信任计算机进行:

  • 如您所见,客户端需要将访问凭据存储到数据库。
  • 大多数情况下,此类连接是在没有传输安全性(未加密)的情况下建立的,因此任何窃听者都可以观察和破坏请求/响应。
  • DB 路径中的延迟通常是一个问题,因此您希望将其最小化,从而将客户端放置在 DB 附近

违反这一惯例意味着您将不得不处理这些问题。

使用其他协议(例如,HTTP/REST)的中间服务公开一个间接修改数据库的 API 是很常见的。您将服务保留在trusted computing base 中的主机上,并且只有该主机访问数据库。 在此架构中,您可以(并且应该)在中间服务中执行身份验证和mandatory access control。反过来,为访问该服务的每个客户端提供不同的凭据将有助于确保安全。


如果此时您无法重写您的应用程序,您应该遵循 patriciasz 在keeping the least priviledge possible 上的建议。你可能也对techniques to make it harder (but not impossible) to obtain the credentials感兴趣

【讨论】:

  • 我认为一般来说这是最好的答案,但在这种特殊情况下,我猜它会涉及重写应用程序。
  • @patriciasz 是的,当然。我已经包含了您的建议,以及指向另一个类似问题的链接,并提供了非常详尽的答案
  • 感谢您的回答。但在这种情况下,它是一个桌面应用程序。任何人都可以安装它。所以我不能保证它应该在一个受信任的网络基础中。因此,我正在考虑 patriciasz 的建议,即我至少可以确保该用户不能进行其他数据库操作。
  • @Nitheesh 我认为 goncalopp 建议在受信任网络中的服务器上运行 API。它将充当您的用户计算机和数据库之间的代理。因此,该应用程序可以安装在任何地方,而不仅仅是在受信任的网络中。
【解决方案2】:

没有办法保护您的代码(无论是否编译)不受运行它的机器的所有者的影响。

在这种情况下,他实际上将拥有与您的应用程序的 SQL 用户相同的访问限制。

【讨论】:

    【解决方案3】:

    没有很好的方法来保护您的代码,但您可以在使用connect 的同时使用read_default_file 选项。然后将从文件中读取连接参数,指定为 read_default_file。 注意:这绝不会保护您的用户名、密码,因为任何有权访问 cnf 文件的人都可以获取信息。

    【讨论】:

      【解决方案4】:

      在数据库和应用程序之间建立一个接口。只有接口才能获得真正的数据库访问权限。

      为应用提供访问接口的凭据,并且只提供接口,然后让接口与数据库交互。这增加了第二层以提高安全性并有助于保护数据库的完整性。

      将来从一开始就使用单独的逻辑进行开发。该应用程序不需要访问数据库。相反,它需要来自数据库的数据。

      此外,作为数据库安全规则,请避免将凭据放在客户端。如果您有 n 个应用程序,那么 n 个应用程序可以访问您的数据库,并且控制访问点是数据库逻辑的重要组成部分。

      【讨论】:

        【解决方案5】:

        分离程序逻辑是真正的交易,凭据不需要像芯片所说的那样驻留在客户端机器上

        【讨论】:

          猜你喜欢
          • 2016-10-30
          • 1970-01-01
          • 2011-03-11
          • 1970-01-01
          • 2012-11-04
          • 2013-01-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多