【发布时间】:2012-03-25 11:23:12
【问题描述】:
我有一个困扰我多年的场景。如果您必须使用用户名和密码连接到数据库或其他服务(如 Web 服务),那么如果您通过 .NET 程序集进行连接,那么在哪里存储这些信息最安全?我知道您必须对密码进行加密,但是您遇到了一种先有鸡还是先有蛋的问题——很好——您可以加密它,但是您将密钥放在哪里?
在 .NET 中,您不能对密码进行硬编码,因为您可以反编译 .NET 代码。
我研究过在隔离存储中使用基于程序集的权限,但 MS 建议不要在其中存储未加密的秘密项目,因为特权用户可以获得访问权限,所以我们再次将问题从 A 点转移到 B 点。例如,无需了解数据库中信息的域管理员将能够获得访问权限,因为能够成为域中任何工作站的管理员。
您可以加密应用程序。 Config 和 Web.Config,但我相信特权用户可以访问密钥。
我认为您在使用 DPAPI 时遇到了同样的问题。
我曾考虑将密码存储在远程数据库中,并在远程数据库中进行加密,并通过操作系统身份验证来获取它们,但我们部门禁止将密码存储在数据库服务器上。我很确定我被卡住了,需要确认。
【问题讨论】:
-
我知道这是不久前的事了,但我已经回答了您的问题如何存储加密的密码。请看一看。
标签: c# asp.net vb.net password-protection password-storage