2009-07-02 60 views
4

在我的winforms应用程序中,我将本地级别的连接字符串散列化。从中间保护连接字符串

但这里有几个问题。

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

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

+0

您的应用可以解密哈希? – yfeldblum 2009-07-02 10:00:05

回答

7

在保持连接字符串安全可靠方面,您只有有限的方法。

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

Encrypting Web.Config Values in ASP.NET 2.0

Encrypt Connection Strings in VS 2005 .config Files

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

恕我直言,防止用户看到您的数据库连接字符串的最佳方法之一是永远不会给它们在第一个地方,加密或不。这将要求您的Windows窗体应用程序不直接与数据库对话(使用连接字符串),而是直接与(例如)Web服务对话。

当然,你会给Windows窗体应用程序一个可以访问Web服务的URL,但是这个Web服务的使用将受到限制和控制,只允许用户使用特定的用户名/密码组合。

这种方式,你可以承载Web服务(不必是web service - 它可能是你的Windows窗体的应用将有超过.NET remotingWCF通信的远程应用程序),一个物理上独立的服务器/机器上您已完全控制和保护此机器perimeter security

这是您在此安全机器上运行的应用程序和服务,它们可以访问数据库的连接字符串,并且此连接字符串不需要在本机外围泄漏,从而保证它完全安全假设前述的周边安全已到位并且有效)。

当然,实现所有这些几乎肯定意味着对应用程序进行了巨大的体系结构更改,然而,根据应用程序的大小和性质,这可能会也可能不值得,但真正保护您的应用程序的唯一方法来自用户(或用户的机器)的连接字符串是确保它永远不可用(以加密或解密的形式)给用户(或用户的机器)。

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

+0

“,但这个网络服务的使用将受到限制和控制,只允许用户使用特定的用户名/密码组合进行访问。”......鸡鸡蛋问题,是不是?...你现在需要隐藏用户名/ password – BlackTigerX 2009-09-17 19:54:53

4

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