我想创建一个连接到中央远程数据库的应用程序,该应用程序旨在提供给在本地网络中的计算机上使用的多个用户。我们面临的主要挑战是隐藏用户的连接字符串,以防止潜在的恶意使用
到目前为止,我发现我必须使用there描述的RsaProtectedConfigurationProvider
类来加密app.config
,并解密它。但我无法弄清楚如何向客户提供所需的RSA密钥?以及所有这些如何阻止破解者找到密钥并使用它来解密app.config
?
thanx everyone;)
答案 0 :(得分:3)
如果您仔细阅读MSDN上web farm secenarios文章的How To: Encrypt Configuration Sections in ASP.NET 2.0 Using RSA,您将看到如何创建密钥并从中提取私钥和公钥,以便在不同的密钥上安装公钥机等。
要点:
创建自定义键:
aspnet_regiis -pc "CustomKeys" -exp
在配置文件中添加configProtectedData
部分,以使用自定义键
加密想要的部分
导出密钥:
aspnet_regiis -px "CustomKeys" "C:\CustomKeys.xml" -pri
复制并导入其他计算机中的密钥:
aspnet_regiis -pi "CustomKeys" "C:\CustomKeys.xml"
答案 1 :(得分:3)
我们面临的主要挑战是隐藏用户的连接字符串
您不能让用户拥有直接连接到数据库的客户端应用程序,并且希望能够隐藏连接字符串。这是不可能做到的。
如果连接字符串必须保密,请将其存储在服务器上,让客户端应用程序连接到Web服务,而不是直接连接到数据库。
答案 2 :(得分:0)
这些天,我遇到了同样的问题,并找到了另一个解决方案,虽然它不是很优雅,但是对我有用。 我使用AES算法通过我定义的密钥对连接字符串进行加密,然后将结果字符串替换为配置文件。 然后,我在应用中添加了具有相同密钥的解密函数,并将其用于get connectionstring方法,如下所示:
public string myConnectionString {
get {
return ((new Cypher().Decrypt(this["myConnectionString"].ToString())));
}
}
主要缺点是编译时可能会覆盖这些更改,因此最好在应用程序就绪时进行更改。 我使用了在这里找到的用于加密/解密的方法: AES Encryption Decryption (Cryptography) Tutorial with example in ASP.Net using C# and VB.Net