连接字符串最佳实践

16

从安全角度来看,管理Web应用程序中的连接字符串最好的方法是什么? 我有几种不同的方式。我将它们存储为纯文本web.config设置密钥。我还创建了一个“Constants”类,其中包含每个连接字符串的公共只读字符串属性。

是否有人对管理连接字符串有任何建议,以使我不必担心它们被恶意发现? 我肯定支持加密。

4个回答

3

您可以在web.config文件中加密连接字符串

将连接字符串存储在类的属性或常量中是不安全的。任何使用反编译器的人都可以看到您的连接字符串。

最好的方法是进行配置加密。


你可能还想使用SecureString而不是普通字符串,这样内存转储也不会暴露它...如果你倾向于这种方式的话。 - EightyOne Unite

2
您可以使用命令行工具aspnet_regiis来加密和解密web.config的部分内容:
加密: aspnet_regiis -pef "connectionStrings" "c:\folder\"
解密: aspnet_regiis -pdf "connectionStrings" "c:\folder\"

2
如果您对服务器有完全控制权,您还可以将连接字符串存储在 Machine.Config 中。如果您有很多应用程序都使用同一DB服务器,这非常方便。
我不确定是否值得加密,因为首先必须访问服务器才能查看 machine.config。而且,如果您的服务器已被攻击,则加密无法阻止黑客从配置文件中获取凭据。

只要攻击者无法上传自己的.aspx文件到您的应用程序目录中,它确实可以保护您免受意外暴露web.config内容的影响。 - finnw
对于散列化用户密码也适用类似的警告 - 它只能保护你免受泄露的数据库备份的伤害。如果攻击者控制了 Web 服务器,两者都是无用的 - 但无论如何都值得做。 - finnw
在我的工作中,我们会针对不同的服务器(开发、测试、生产)这样做,以便每个服务器始终使用适当的连接字符串。效果非常好。 - spilliton
一旦连接字符串在您的machine.config中,最好不要将其暴露出来。如果您这样做了,那么您已经很危险了。在web.config中进行加密是不同的。您倾向于归档web.config文件等,以帮助防止内部窥视者看到它们。 - JoshBerke

1

@vartec: 这不是一个完全的SNAFU..

如果你使用标准的.NET加密机制对文本进行加密,那么IIS确实可以读取加密后的文本,而且这种加密方式不会破坏任何UTF8或Unicode编码。微软也鼓励采用这种最佳实践。

你可以看到如何加密连接字符串的示例,参考以下内容:

"使用数据源控件时如何安全地连接字符串"

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接