我正在开发一个与PostgreSQL和其他数据库功能一起使用的应用程序,这些功能需要用户名和密码才能登录到远程服务器来存储数据。用户必须能够设置用户名和密码,然后将其存储在磁盘上的配置文件中。问题是任何人都可以打开配置文件并读取凭据,从而产生严重的安全问题。
我已经对加密整个配置文件进行了一些研究,然后在需要时对其进行解密,但问题是黑客可以通过调试器放置程序并轻松找到解密密钥。使用C / C ++在Windows上保持配置数据机密的最佳方法是什么?
答案 0 :(得分:2)
攻击者能够将调试器附加到正在运行的程序的那一刻就是游戏结束的那一刻。能够调试您的程序意味着您的用户帐户或底层操作系统受到损害,这意味着代表您的应用程序的每个安全措施都是徒劳的。攻击者将(知识,持久性和动机)了解您输入计算机的所有内容,或者之前已输入和存储的内容。
答案 1 :(得分:0)
用户必须能够设置用户名和密码 然后存储在磁盘上的配置文件中
这是一个弱点,这是你需要改变的。 (另一方面,您存储的密码从不会改变吗?这是另一个安全弱点。)
如Eugen Rieck的回答所述,如果攻击者可以物理访问您的系统,他将及时打破您的所有防御。
简单的解决方案很明确:不要让他有权访问处理安全/授权的系统。将SQL服务器放在专用的远程计算机上,让它处理用户名/密码验证。
或者,使您的应用程序与处理用户身份验证和路由数据库查询的远程计算机上的部分进行多层次。
这意味着您的用户每次启动您的应用程序时都必须登录。 (最好也是在预先设定的不活动时间之后。)
这完全取决于你需要多安全。重要的是要理解安全性并不容易创建,如果可能的话,您应该总是尝试使用现有的框架。