笔者喜欢将信息保存在Web.config文件的appSettings部分;这样通过改变文本文件的值就可以改变了网站的操作。笔者特别喜欢将连接字符串保存在connetionStrings要素中。
客户一般不认同这种在config文件中保存数据的做法。具体点说,客户关心的是如何在文本文件中保存敏感信息。碰到这类客户时,笔者会告诉他们如果能够其他人可以从他们的网络服务器中移除文本文件,那么他们的问题就连本人都无法解决。
不过客户并未意识到这一论点的必要性。事实上,他们有自己的观点。有相当一部分的安全漏洞是机构中的人员自己造成的,而由此带来的安全问题防不胜防。因此笔者建议为web.config文件加密。
局部加密
下面给出的代码是用来加密web.config文件中的指定部分。首选要用Configuration对象的Sections集合选取一个部分。在这个示例中,选择的是connectionStrings部分:
Dim configFile As System.Configuration.Configuration Dim configSection As ConfigurationSection configFile =System.Web.Configuration.WebConfigurationManager. _ OpenWebConfiguration(Request.ApplicationPath) configSection = configFile.Sections("connectionStrings") |
现在已经拥有了要加密的部分,我们可以对其加密,指定需要使用的加密方案。最后一步是将加密后的版本保存到配置文件中:
configSection.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider")
configFile.Save()
web.config文件中的结果如下所示:
< connectionStrings configProtectionProvider="DataProtectionConfigurationProvider"> < EncryptedData> < CipherData> < CipherValue>...encrypted data... < /CipherValue> < /CipherData> < /EncryptedData> < /connectionStrings> |
好的一方面是当你使用ConfigurationManager的ConnectionString集合来检索加密连接字符串时,连接字符串会自动为你解密。不论connectionStrings是否被加密,该代码都有效:
Dim cnStr As String
cnStr = System.Web.Configuration.WebConfigurationManager. _
ConnectionStrings("Northwind").ConnectionString
由于是使用网络服务器的独占密钥为字符串加密,即便文件被人从网站中窃取,它也不能在网络服务器以外的地方被解密。这意味着如果你不将文件转送到伺服器,那也同样不能将其解密。如果你是在测试服务器中对连接字符串加密,那么就要将页面转送到伺服器中,ASP.NET是不能够用伺服器的独占密钥为字符串解密的。
有时,你只需要检查文件中的内容来为web.config解密。下面的代码就负责这项工作:
Dim configFile As System.Configuration.Configuration Dim configSection As ConfigurationSection configFile = System.Web.Configuration.WebConfigurationManager. _ OpenWebConfiguration(Request.ApplicationPath) configSection = configFile.Sections("connectionStrings") configSection.SectionInformation.UnProtectSection() configFile.Save() |
如果你不想使用代码,可以用aspnet_regiis工具为web.config文件的局部来加密或解密。你必须传送这一工具来指定加密部分以及配置文件文件夹的路径名称,而且还要传送-prov参数来指定加密方案:
aspnet_regiis.exe -pef section physical_directory -prov provider
这一示例为c:/NorthwindCRM文件夹中的配置文件configurationStrings部分进行加密:
aspnet_regiis.exe -pef configurationStrings c:/NorthwindCRM
-prov "RsaProtectedConfigurationProvider"
你还可以使用aspnet_regiis工具来解密,或者可以用来确保没有人能将文本文件从你的网络服务器中偷走。