6

我相信已经有很多讨论了,但是如何在应用程序中存储密码?(我的意思不是存储在数据库表中的用户密码,而是建立连接字符串的密码)

我已经看到了一些建议,例如将其加密存储在诸如 xml 文件之类的平面文件中,然后在运行时读取它+解密它。如果这个应用程序在服务器上运行,这是一个很好的选择,但是如果应用程序将被部署到最终用户的电脑上呢?即平面文件将被复制到用户的电脑。这仍然是一个好习惯吗?(我的直觉是“不”)

我知道 SecurityString 的存在,但是我也在一篇文章中读到 SecurityString 也可以很容易地被破解。

使用 Windows 7 附带的 Password Vault 是个好主意吗?有没有以编程方式使用它的好例子?我在 msdn 中看到过一个示例,但首先它被标记为“windows 8”,其次当我下载文件并在 Visual Studio 2012 EXPRESS 中打开解决方案时,它无法打开。

欢迎任何建议......非常感谢。

- 更新 -

假设该应用程序将在 Windows 域内的几台 PC 上运行。(1) 在启动时,应用程序将执行 LDAP 身份验证(活动目录)。只有在认证成功后,应用程序才会继续执行,并且(2)应用程序在后台可以连接数据库,接受用户输入来查询数据库,这就是 db passwd 发挥作用来建立连接字符串的地方(不,这不是 SQL SERVER 数据库,所以我认为使用 Windows 身份验证的选项不可行,除非使用商业插件)。

db 位于同一个域中,并且已设置为允许特定范围的 IP 地址,并且启用了 SSL。简而言之,从这个意义上说是相当安全的。唯一不安全的是如何存储应用程序的 db passwd。

引起我注意的是 Mysql Workbench。它将保存数据库连接,包括存储在密码库中的密码。那是mysql自己实现的密码库,我很好奇它是怎么做的。

4

2 回答 2

8

没有办法向您的用户提供密码并期望它保持安全。即使它隐藏在您编译的应用程序中并使用单向哈希进行哈希处理,确定的人也会将其恢复。

相反,您应该考虑您的安全架构。

如果您正在提供应用程序连接的服务,那么您应该考虑提供某种更强大的身份验证作为公共 API 的一部分。

如果连接字符串用于连接到分布式软件的另一部分,那么您应该使最终用户可配置密码并将其存储在密钥环或其他加密存储中。

- 更新 -

看起来这可能是您正在寻找的;

http://www.microsoft.com/indonesia/msdn/credmgmt.aspx

于 2012-12-11T16:33:31.320 回答
5

如果应用程序将部署在您无法或很少控制系统安全的地方,即外部用户 pc,那么创建用户登录可能是值得的。针对此登录对用户进行身份验证,然后从相对安全的服务器使用您提供数据所需的任何凭据。

这并不能保证安全性,但如果您将来需要更改密码,或者个别用户受到威胁,维护起来会更容易。

于 2012-12-11T16:31:22.770 回答