OrE*_*lse 4 sql-server connection-string sqlconnection winforms
在我的winforms应用程序中,我在本地级别散列连接字符串.
但这里有几个问题.
我的应用程序解密连接字符串后,连接字符串信息以明文形式发送?既然我的应用程序是在本地安装的,那么中间人可能是任何用户?
我如何保护连接字符串,因为"强制加密"选项需要额外的证书?
在这里,您只需要有限的方法来保持连接字符串的安全性.
一种选择,如果您的连接字符串存储在web.config或app.config文件中(分别用于Web和Windows应用程序),您可以加密该值.这里有几个链接,详细说明了如何做到这一点:
当然,正如你正确地说的那样,这可能无法实现你想要的安全性,因为应用程序可能正在用户的机器上运行,因此app.config文件(即使在加密状态下)和相关的加密/解密也是如此.也可以在用户的机器上使用密钥.然后,知识渊博且有进取心的用户可以访问您的"纯文本"连接字符串.
恕我直言,防止用户看到您的数据库连接字符串的最佳方法之一是永远不会给它们加密或不加密.这将要求您的Windows窗体应用程序不直接与数据库对话(使用连接字符串),而是直接与(例如)Web服务对话.
当然,您可以为Windows窗体应用程序提供一个可以访问Web服务的URL,但是这个Web服务的使用将受到限制和控制,只允许使用用户特定的用户名/密码组合进行访问.
通过这种方式,您可以在物理上独立的服务器/计算机上托管Web服务(不必是Web服务 - 它可以是您的Windows窗体应用程序将通过.NET远程处理或WCF进行通信的远程应用程序)不要在有完整的控制和保护本机与周边安全.
这个安全机器上运行的应用程序和服务可以访问数据库的连接字符串,并且这个连接字符串不需要在本机的外围泄露,从而保证它完全安全(假设前面提到的周长)安全到位并且有效).
当然,实现所有这些几乎肯定意味着对应用程序进行了巨大的体系结构更改,这取决于应用程序的大小和性质,可能是也可能不值得,但是,真正保护连接字符串的唯一方法是用户(或用户的机器)应确保它永远不会(以加密或解密的形式)提供给用户(或用户的机器).
一旦将连接字符串放在用户的机器上,即使处于加密状态,您也需要为同一台机器提供解密该加密连接字符串的能力,并且链中存在弱链接和(对资源丰富的用户)可以确定您的纯文本连接字符串.您可以将加密连接字符串的解密卸载到另一台(安全)计算机,但这只是前面提到的客户端 - 服务器机制的一种变体,从而执行保持安全的部分(解密密钥,连接字符串等)在您自己的安全控制下的另一台机器上.
| 归档时间: |
|
| 查看次数: |
2909 次 |
| 最近记录: |