通常我们都会把数据库连接字符串也在web.config中,网站不是在服务器上,为了防止其他用户获取服务器数据库连接密码,需要
对web.config中的字符串加密。
解决方法:
1:通常做法是通过加密、解密算法,通过自己的密钥把连接字符串加密后,在放入web.config中,在程序dbhelper中获取连接字符串时候
再进行解密。
2:利用.net2.0自身的加密工具加密。
步骤:
1.添加密钥
执行:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pc "leador" -exp
其中"leador"为密钥名称

2.添加web.config节点
在web.config的<configuration></configuration>之间添加:
<configProtectedData>
<providers>
<add keyContainerName="leador" useMachineContainer="true" description="Uses RsaCryptoServiceProvider to encrypt and
decrypt" name="leador" type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</configProtectedData>
注意:这里keyContainerName="leador"和name="leador"分别表示你的密钥名称;

3.加密web.config
到网站根目录添加一个批处理文件enweb.bat,内容如下:
@echo off
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "system.web/identity" "E:\HS Studio\Donet2\Hnlawyer" -prov "leador"
//这里是加密数据库连接字符串 (connectionStrings
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" "E:\HS Studio\Donet2\Hnlawyer" -prov "leador"
PAUSE
注册上面的的路径和名称!
运行后出现成功!
4.解密
同样到网站根目录添加一个批处理文件deweb.bat,内容如下:
@echo off
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "system.web/identity" "E:\HS Studio\Donet2\Hnlawyer"
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pdf "connectionStrings" "E:\HS Studio\Donet2\Hnlawyer"
PAUSE

最后就是要注意:做完后找到C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys目录下,找到生成
的密钥文件(可按时间查找),给上network service可读取权限,不然会出现Error message from the provider: The RSA key container could
not be opened. 无法读取,这样可能会出现,如果没有自己的服务器,没有权限修改MachineKeys目录



这样就可以简便的保护你的数据库。

另外:
ASP.NET 2.0支持对Web.config的部分配置节进行加密,以下配置节中的数据是不能进行加密的:
<processModel>
<runtime>
<mscorlib>
<startup>
<system.runtime.remoting>
<configProtectedData>
<satelliteassemblies>
<cryptographySettings>
<cryptoNameMapping>
<cryptoClasses>

 

posted on 2008-06-18 16:11  杜辉  阅读(2815)  评论(2编辑  收藏  举报