国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

ASP.NET虛擬主機(jī)中Forms Authentication的安全性

2024-07-10 13:05:35
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

原創(chuàng) by fancyf(fancyray) http://blog.csdn.net/fancyf/
    寫完了《asp.net forms authentication所生成cookie的安全性》,覺(jué)得可以為forms的安全性松一口氣了,結(jié)果最初提出問(wèn)題的貼主又提到了一個(gè)問(wèn)題:machinekey是怎樣實(shí)現(xiàn)的?同一臺(tái)虛擬主機(jī)上不同的web application所使用的machinekey是不是一樣的?上次沒(méi)想到這個(gè)為題,再做一下試驗(yàn)。
    試驗(yàn)思路:在同一臺(tái)電腦上新建一個(gè)webapplication,所綁定的域名不一樣,也不在同一個(gè)應(yīng)用程序池中。在新建的webapplication生成一個(gè)cookie,把值拿到原先的webapplication中看看能否通過(guò)驗(yàn)證。
    試驗(yàn)過(guò)程:為了綁定不同的域名,在這臺(tái)電腦上啟動(dòng)了dns服務(wù),并將網(wǎng)絡(luò)連接中的dns服務(wù)器指向了這臺(tái)電腦的ip。根據(jù)formsauthenticationticket構(gòu)造函數(shù)的原型:
public formsauthenticationticket(int version, string name, datetime issuedate, datetime expiration, bool ispersistent, string userdata, string cookiepath)
    以及在getauthcookie(...)中的調(diào)用方法:
formsauthenticationticket ticket1 = new formsauthenticationticket(1, username, datetime.now, createpersistentcookie ? datetime.now.addyears(50) : datetime.now.addminutes((double) formsauthentication._timeout), createpersistentcookie, "", strcookiepath);
    決定在測(cè)試頁(yè)面上放兩個(gè)文本框,一個(gè)是用戶名txtusername2,一個(gè)是時(shí)間txtgendate(代替datetime.now),然后在generation按鈕的click事件中這樣寫:
datetime gendate = datetime.parse(this.txtgendate.text);
formsauthenticationticket ticket1 = new formsauthenticationticket(1, this.txtusername2.text, gendate, gendate.addyears(50), true, "", "/");
this.lblencryptedcookie.text = formsauthentication.encrypt(ticket1);
    運(yùn)行發(fā)現(xiàn),對(duì)相同的用戶名和生成時(shí)間,formsauthentication.encrypt(ticket1)所得到的結(jié)果每次都不一樣,但是每個(gè)結(jié)果都是有效的。
    現(xiàn)在把這個(gè)頁(yè)面拿到新建立的webapplication中運(yùn)行,把得到的一組結(jié)果放在了原webapplication的login.aspx頁(yè)面上:
<script language=javascript>
 document.cookie="mylab=5623de03be6ee52298f721b181c83f77a97688bb5268602de80c1a3db07b7a1ffb828080bd0785b18bb8072996c2e241fd9a54f0addd8500c2c510db54c31a40c8614541a9cf9c1a";
</script>
    在原webapplication程序中啟動(dòng)一個(gè)非登錄頁(yè)面(upload.aspx),結(jié)果正常跳轉(zhuǎn)到了login.aspx頁(yè)面。此時(shí)應(yīng)該已經(jīng)執(zhí)行了上面的js程序,也就是說(shuō)另一個(gè)程序中生成的cookie已經(jīng)生效了。直接再次輸入upload.aspx的url,結(jié)果通過(guò)了驗(yàn)證!此時(shí)通過(guò)iehttpheaders可以清楚地看到,瀏覽器發(fā)送的請(qǐng)求中有這個(gè)值"mylab=5623de03be6ee52298f721b181c83f77a97688bb5268602de80c1a3db07b7a1ffb828080bd0785b18bb8072996c2e241fd9a54f0addd8500c2c510db54c31a40c8614541a9cf9c1a"。

    這說(shuō)明,machinekey的確只與machine有關(guān),而與webapplication無(wú)關(guān)。一個(gè)application生成的cookie也可以通過(guò)其他application的forms驗(yàn)證!值得擔(dān)心的事情終于出現(xiàn)了。a和b兩個(gè)webapplication在同一臺(tái)電腦上的兩個(gè)不同的虛擬主機(jī),a中使用了forms驗(yàn)證。b只要執(zhí)行:
datetime gendate = datetime.parse(this.txtgendate.text);
formsauthenticationticket ticket1 = new formsauthenticationticket(1, this.txtusername2.text, gendate, gendate.addyears(50), true, "", "/");
this.lblencryptedcookie.text = formsauthentication.encrypt(ticket1);
    這樣一段代碼可以生成在a中合法的一個(gè)用戶名所對(duì)應(yīng)的cookie,b通過(guò)偽造cookie的方式向a發(fā)出請(qǐng)求,就可以通過(guò)a的驗(yàn)證,從而獲的任何一個(gè)用戶的權(quán)限!這一切都太簡(jiǎn)單了,不需要任何高深的技術(shù),只要a和b在同一臺(tái)電腦上?。?!而且根據(jù)《asp.net forms authentication所生成cookie的安全性》得出的結(jié)論,a無(wú)論是修改b所冒用的用戶的密碼還是在a上注銷這個(gè)用戶,都無(wú)法阻止b的行為,除非禁用這個(gè)用戶名,而且不讓b獲得任何一個(gè)合法的用戶名才能避免再次被仿冒。
    這下我是不敢在虛擬主機(jī)上僅僅使用forms驗(yàn)證了。如果你的asp.net主機(jī)上還有其他用戶,還是盡快加強(qiáng)安全措施吧。forms驗(yàn)證根本就不是給虛擬主機(jī)的用戶用的,也根本沒(méi)有考慮虛擬主機(jī)的安全性。
 

    免責(zé)聲明:本文僅僅是從技術(shù)的角度來(lái)探討系統(tǒng)的安全性,任何人對(duì)本文的使用僅限于加強(qiáng)自己的網(wǎng)站的安全性,不得利用本文的內(nèi)容從事非法活動(dòng)。且作者不承擔(dān)任何人利用本文給第三方造成的損失。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 高密市| 蓬溪县| 五家渠市| 都江堰市| 开化县| 蒙山县| 科技| 逊克县| 华蓥市| 彰化市| 宁津县| 平昌县| 浪卡子县| 正蓝旗| 蓬莱市| 密山市| 永年县| 东乌| 武鸣县| 方城县| 万载县| 敖汉旗| 鲁甸县| 延津县| 阜城县| 绍兴县| 固原市| 奉节县| 友谊县| 揭西县| 宣威市| 曲阜市| 布尔津县| 肥西县| 徐闻县| 西华县| 广元市| 澎湖县| 台中县| 洪洞县| 宁河县|