asp.net forms authentication所生成cookie的安全性
我做這個實驗是因為http://community.csdn.net/expert/topic/3927/3927012.xml?temp=.3752405
最初我想,.net的驗證應該是比較安全的吧,生成的cookie也應該與這台電腦的獨特的參數相關,拿到另一台電腦上就應該無效了。那麼是不是一個用戶名對應一個cookie值呢?是否能夠通過偽造cookie值來騙過表單驗證呢?做一番試驗。
web.config
<authentication mode="forms"> <forms name="mylab" loginurl="/login.aspx"> <credentials passwordformat="clear"> <user name="fancyray" password="fancyray"/> </credentials> </forms> </authentication. <authorization> <deny users="?" /> </authorization>
login.aspx只有一個用戶名輸入框txtusername、一個密碼輸入框txtpassword和一個提交按鈕,click事件如下:
if (formsauthentication.authenticate(this.txtusername.text, this.txtpassword.text)) { formsauthentication.redirectfromloginpage(this.txtusername.text, true); } else { response.write("login denied"); }
借助iehttpheaders(http://www.blunck.info/)可以看到,通過驗證後增加了一個類似這樣的cookie:
mylab=3ff83247c29eb5d14d61f389d453eee0586b94e27609c321b017be7b88d1a94d249996428a7a18f5c2d69f3c4dd2b88c00172cafb0b4b4ed8784db62d1d61bcc0c786b4ea7868fc6
看來這就是加密以後的cookie了。下面要換一台電腦,直接將這個值設置為cookie,看看是否需要forms驗證。
在login.aspx頁面中加上這樣一句話:
<script language=javascript> document.cookie="mylab=3ff83247c29eb5d14d61f389d453eee0586b94e27609c321b017be7b88d1a94d249996428a7a18f5c2d69f3c4dd2b88c00172cafb0b4b4ed8784db62d1d61bcc0c786b4ea7868fc6"; </script>
這樣只要一打開login.aspx頁面就會自動加入這個cookie。