4

在我的 winforms 应用程序中,我在本地级别对连接字符串进行哈希处理。

但这里有几个问题。

我的应用程序解密连接字符串后,连接字符串信息以明文形式发送?由于我的应用程序安装在本地,中间的人可能是任何用户?

除了需要额外证书的“强制加密”选项之外,我如何保护连接字符串?

4

3 回答 3

7

关于保持连接字符串的安全和可靠,您在这里只有有限数量的方法。

一种选择是,如果您的连接字符串存储在 web.config 或 app.config 文件中(分别用于 web 和 windows 应用程序),您可以加密该值。这里有几个链接详细说明了如何做到这一点:

在 ASP.NET 2.0 中加密 Web.Config 值

加密 VS 2005 .config 文件中的连接字符串

当然,正如您所说的那样,这可能无法达到您想要的安全性,因为应用程序很可能在用户的机器上运行,因此 app.config 文件(即使处于加密状态)和相关的加密/解密密钥也将在用户的机器上可用。然后,知识渊博且有进取心的用户可以访问您的“纯文本”连接字符串。

恕我直言,防止您的用户看到您的数据库连接字符串的最佳方法之一是从一开始就永远不要将其提供给他们,无论是否加密。这将要求您的 Windows 窗体应用程序不直接与数据库对话(使用连接字符串),而是直接与(例如)Web 服务对话。

当然,您应该为 Windows 窗体应用程序提供一个 URL,它可以使用该 URL 访问 Web 服务,但是通过仅允许使用特定于用户的用户名/密码组合进行访问,该 Web 服务的使用将受到限制和控制。

这样,您可以在物理上独立的服务器/机器上托管 Web 服务(不必是Web 服务- 它可以是您的 Windows 窗体的应用程序将通过.NET 远程处理WCF与之通信的远程应用程序)确实可以完全控制并使用周边安全保护这台机器。

您在这台安全机器上运行的应用程序和服务可以访问数据库的连接字符串,并且这个连接字符串永远不需要泄露到这台机器的外围,从而保持它完全安全(假设前面提到的外围安全措施到位并且有效)。

当然,实现所有这些几乎肯定意味着对您的应用程序进行巨大的架构更改,这取决于您的应用程序的大小和性质,可能值得也可能不值得,但是,真正保护您的连接字符串免受用户(或用户的机器)要确保用户(或用户的机器)永远无法使用(以加密或解密的形式)。

一旦您将连接字符串放在用户的机器上,即使处于加密状态,您也需要赋予同一台机器解密该加密连接字符串的能力,并且链中存在薄弱环节以及 (给足智多谋的用户)可以确定您的纯文本连接字符串。您可以将加密连接字符串的解密卸载到另一台(安全)机器,但这只是前面提到的客户端-服务器机制的一种变体,其中执行保持安全的部分(解密密钥、连接字符串等)在您自己的安全控制下的另一台机器上。

于 2009-07-02T10:39:49.377 回答
4

您无法保护连接字符串。您可以做的是通过 SSL 安全通道进行连接。

于 2009-07-02T09:57:23.657 回答
0

MSDN 中的此页面描述了如何为连接实现 SSL:

http://support.microsoft.com/kb/316898

这个描述了 SQL 身份验证(用于 ASP.NET):

http://msdn.microsoft.com/en-us/library/ff648340.aspx

看来您真的只需要加密用户名和密码?在这种情况下,Windows 身份验证应该是一个选项(尽管我经常无法让它为我工作)

于 2011-01-10T20:55:13.770 回答