.net桌面应用程序中的连接字符串安全性

时间:2010-01-26 23:16:43

标签: winforms encryption passwords desktop connection-string

我正在开发一个.net winforms桌面应用程序,该应用程序旨在作为备份应用程序在多个银行的分支机构中运行,只要主要的(Web应用程序)由于与银行中心节点的连接问题而不可用。除了SQL-Server数据库之外,分支本身不计入任何企业服务。因此,应用程序应该能够直接连接到SQL-Server。当我必须为应用程序提供密码以连接到数据库时,我的问题出现了:

1)在app.config文件或类似文件中以明文形式存储密码不是一种选择(客户要求密码加密)

2)存储在配置文件中加密的密码导致需要在本地提供加密密钥。加密密钥可以在应用程序的代码中进行硬编码,但使用.net-decompiler或类似代码可以轻松读取。

3)使用自定义算法进行加密/解密也不会起作用,原因与2)相同。

4)银行不支持集成安全性

此外,客户要求他们应该能够在一个位置(分支内)更改密码,而无需从一台计算机转到另一台更新配置文件(排除使用机器密钥的可能性)加密单个机器的配置文件中的密码,如asp.net确实)

您是否会提供任何其他方法或建议来解决此问题? 我将不胜感激任何帮助。 提前致谢, 贝尔纳韦

4 个答案:

答案 0 :(得分:1)

您可以使用.Net内置的受保护配置。请参阅MSDN文档中的Encrypting Configuration Information Using Protected Configuration。其中一个存在的理由是加密配置文件中的连接字符串等数据。

答案 1 :(得分:1)

我认为以任何方式加密密码都不会解决您的问题。如果用户必须将密码发送到服务器,并且密码位于框中,则根据定义,运行应用程序的用户必须能够访问密码并能够解密密码。否则,您将无法对其进行身份验证。这意味着无论您在何处存储密码,用户始终都可以获得密码。

我可以想到两种可能有效的方法,但我担心它们并不完全符合您的需求。

  1. 取消拥有的要求 用户将密码发送到服务器 通过使用某种本地代理 (例如使用WCF窗口 服务)拿你的winform 请求,然后发送给你 代表DB服务器。如果你 使用帐户安装服务 与用户的帐户不同, 然后你可以保护密码 另一种提到的任何手段 答案。他们关键在于制作 确定应用程序用户没有 有权访问这些资源 服务帐户需要解密 密码。
  2. 请勿将密码存储在Web配置中。在数据库级别为每个用户分配不同的用户帐户和密码,并让他们在登录时输入。

答案 2 :(得分:0)

你可以

答案 3 :(得分:0)

绝对同意以上有关DPAPI的内容。微软的企业库也是一件轻而易举的事情,所以我会先考虑一下那里。