微软提供的web.config文件的加密方式,掩耳盗铃!

     前一阶段写过一篇有关web.config文件加密的文章http://www.cnblogs.com/longer/archive/2009/03/16/1412795.html,里面讲到了利用.net提供的方式对web.config中的配置节进行加密,尤其是对数据库连接字符串进行加密。看起来加密的方法几乎是完美的,既安全,有不用自己手写代码,只需执行几条命令就可以。但真的安全吗?
    正常情况下,web.config是不能被下载的,所以好多人都直接把数据库连接字符串以明文方式写在web.config中。这种设置在web服务器未被黑客侵入的情况下是安全的。之所以要对web.config文件进行加密,是想即使别人得到了web.config文件,也不能知道加密的配置节的内容。从表面上看,利用.net framework提供的命令对web.config进行加密后,相应的配置节变成了密文,非法用户即使得到了web.config文件,也不知道加密配置节中的敏感信息(如数据库连接字符串)。但问题是,既然非法用户得到了你远程服务器上的web.config文件,一般来说,他已经得到了你的远程服务器的相应权限。既然如此,他就可以运行解密的命令,将web.config文件中加密的配置节解密。也就是说微软提供的所谓通过命令加密web.config的方式,其实是一种掩耳盗铃,自欺欺人的加密方式。
    真正相对安全的方法应该是:自己写个加密,解密的算法,利用个人的私钥,对数据库连接字符串进行加密,这样即使非法用户拥有了web服务器的管理员权限,得到了web.config文件,也不大容易得到加密过的配置节的内容,因为加密算法是我们自己写的。
    当然,世界上没有绝对的安全,即使是自己写的加密算法,也不能确保绝对安全,一个是自己的算法是否够健壮,另一个是例如数据库连接字符串等配置需要在程序中用到,既然用到就需要在程序中解密。即使加密解密算法写成了dll形式,还是面临一个被反编译的问题。当然为防止被反编译,可以对dll进行混淆,甚至加密等操作,这些我还没有深入研究,只是提供一下思路。
  
posted @ 2009-05-16 15:22  John Liu  阅读(918)  评论(8编辑  收藏  举报