How to protect mysqldb connection in python?
我正在创建一个Pygtk应用程序,需要远程数据库的MySQL连接。
1 | db = MySQLdb.connect("remotehost","username","password","databse", charset='utf8') |
应用程序即将完成并即将发布。但问题是,如果任何人都能反编译这个脚本,他们就可以轻松地读取上面的凭证,然后就出现了安全问题。那么,我该如何保护这段代码,或者有什么方法可以强烈编译这个文件呢?
数据库连接通常由受信任网络内的受信任计算机进行,原因有很多:
- 如您所见,客户端需要存储对数据库的访问凭证。
- 大多数情况下,这种连接是在没有传输安全(未加密)的情况下进行的,因此任何窃听者都可以观察和管理请求/响应。
- 数据库路径中的延迟通常是一个问题,因此您希望将其最小化,从而使客户机靠近数据库。
违反这个惯例意味着你必须处理这些问题。
使用其他协议(例如http/rest)公开间接修改数据库的API是非常常见的。您将服务保存在受信任的计算基础上的主机上,并且只有一个主机访问数据库。在此体系结构中,您可以(并且应该)在中介服务中执行身份验证和强制访问控制。反过来,为每个访问该服务的客户机提供不同的凭据将有助于确保安全。
如果此时无法重写应用程序,则应遵循Patriciasz关于尽可能保持最小权限的建议。您也可能对使获取证书更困难(但并非不可能)的技术感兴趣。
无法保护您的代码(编译或不编译)不受运行它的计算机的所有者的保护。
在这种情况下,他实际上具有与应用程序的SQL用户相同的访问限制。
没有很好的方法来保护您的代码,但是您可以在使用
分离程序逻辑是真正的交易,凭证不需要像Chip所说的那样驻留在客户机上。
在数据库和应用程序之间建立接口。只有接口才能获得真正的数据库访问权限。
提供访问接口的应用程序凭据,仅提供接口,然后让接口与数据库交互。这增加了第二层以提高安全性并有助于保护数据库完整性。
在未来的发展中,从一开始就有独立的逻辑。应用程序不需要访问数据库。相反,它需要来自数据库的数据。
另外,作为数据库安全性的一个规则,请避免在客户端放置凭据。如果你有n个应用,那么n个应用可以访问你的数据库,控制访问点是数据库逻辑的一个重要部分。