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

Ber*_*llo 5 encryption passwords desktop connection-string winforms

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

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

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

3)由于与2)相同的原因,使用自定义算法加密/解密将不起作用.

4)银行不支持综合安全性

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

您是否会提供任何其他方法或建议来解决这个问题?我将不胜感激任何帮助.在此先感谢Bernabé

jvi*_*lta 1

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

我可以想到两种可能有效的方法,但恐怕它们并不正是您正在寻找的。

  1. 通过使用某种本地代理(例如使用 WCF Windows 服务)来获取 winform 请求,然后代表您将它们发送到数据库服务器,从而消除让用户将密码发送到服务器的要求。如果您使用与用户帐户不同的帐户安装服务,则可以通过其他答案中提到的任何方法来保护密码。这里的关键是确保应用程序用户无权访问服务帐户解密密码所需的资源。
  2. 不要将密码存储在 Web 配置中。在数据库级别为每个用户分配不同的用户帐户和密码,并让他们在登录时输入。