較為全面的Asp.net提交驗(yàn)證方案分析 (上)
驗(yàn)證碼存儲(chǔ)在頁(yè)面代碼或Cookies里,暴露給客戶端;
通過(guò)Session存儲(chǔ)的驗(yàn)證碼,雖然解決了安全問(wèn)題,但一個(gè)用戶只使用一個(gè)變量存儲(chǔ)驗(yàn)證碼,假如用戶同時(shí)打開一個(gè)以上的頁(yè)面,分別提交的話,就無(wú)法正常使用了;
驗(yàn)證碼不會(huì)過(guò)期,這會(huì)留下隱患,使暴力破解變得可行(當(dāng)然也可以通過(guò)刷新間隔、提交間隔、黑名單等手段加以控制);
此外還有伴隨著提交產(chǎn)生的另一個(gè)問(wèn)題——重復(fù)提交。
為解決上述問(wèn)題,我曾走過(guò)不少?gòu)澛?,后?lái)總結(jié)出了一個(gè)方案可以很好的解決這些問(wèn)題,本文將結(jié)合ADO.NET Entity Framework技術(shù)來(lái)介紹此方案:
這方案的核心就是通過(guò)數(shù)據(jù)庫(kù)統(tǒng)一存儲(chǔ)所有請(qǐng)求頁(yè)面所對(duì)應(yīng)的驗(yàn)證碼及其相關(guān)信息(這也可以通過(guò)Session或別的什么實(shí)現(xiàn),但個(gè)人感覺數(shù)據(jù)庫(kù)更為優(yōu)秀)。
首先來(lái)建立一個(gè)這樣的SQL Server數(shù)據(jù)表,表名設(shè)為“提交驗(yàn)證”:
“ID”字段存儲(chǔ)的是該驗(yàn)證信息的唯一ID,用于查詢,并且我們還會(huì)將此值傳給客戶端用于回發(fā)時(shí)再度獲取對(duì)應(yīng)的信息,采用GUID格式保證了唯一性和復(fù)雜性,客戶端幾乎沒(méi)有偽造的可能;
“會(huì)話ID”字段即用于存儲(chǔ)SessionID,以確保驗(yàn)證信息與用戶會(huì)話相對(duì)應(yīng),如果你不在意客戶端是否會(huì)被劫持的話,也可以忽略這個(gè)字段。
“驗(yàn)證碼”字段即存儲(chǔ)驗(yàn)證碼原文,用于檢驗(yàn)用戶輸入,此外,驗(yàn)證圖片生成函數(shù)也會(huì)通過(guò)ID獲取此數(shù)據(jù)以生成對(duì)應(yīng)的驗(yàn)證圖片。
“是否已提交”字段標(biāo)識(shí)此驗(yàn)證信息是否已使用過(guò),如果不需要給用戶明確的錯(cuò)誤提示的話,可以在提交后直接刪除所使用的驗(yàn)證信息,而不使用這個(gè)字段。
“過(guò)期時(shí)間”字段的數(shù)據(jù)將會(huì)在清理超時(shí)信息時(shí)使用到。
數(shù)據(jù)庫(kù)建好后,就可以建立ADO.NET Entity Framework數(shù)據(jù)模型(EDM)了:
此模型從現(xiàn)有數(shù)據(jù)庫(kù)直接生成即可,不需要做什么額外改動(dòng)。未完待續(xù),此篇中介紹了數(shù)據(jù)結(jié)構(gòu)和思路,在下篇中將介紹代碼實(shí)現(xiàn)以及使用方法。
相關(guān)文章
ASP.NET Core MVC 過(guò)濾器的使用方法介紹
本篇文章主要介紹了ASP.NET Core MVC 過(guò)濾器的使用方法介紹,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09.Net?Core讀取文件時(shí)中文亂碼問(wèn)題的解決方法分享
所以關(guān)于讀取文件亂碼的問(wèn)題,百度上有很多方案,這里再給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于.Net?Core讀取文件時(shí)中文亂碼問(wèn)題的解決方法,需要的朋友可以參考下2022-02-02TreeNodeCheckChanged事件觸發(fā)方法代碼實(shí)例
這篇文章主要介紹了TreeNodeCheckChanged事件觸發(fā)方法代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12ASP.NET登錄注冊(cè)頁(yè)面實(shí)現(xiàn)
這篇文章主要介紹了ASP.NET登錄注冊(cè)頁(yè)面如何實(shí)現(xiàn),感興趣的小伙伴們可以參考一下2015-10-10使用C#處理WebBrowser控件在不同域名中的跨域問(wèn)題
我們?cè)谧鰓eb測(cè)試時(shí),經(jīng)常會(huì)使用WebBrowser來(lái)進(jìn)行一些自動(dòng)化的任務(wù)而有些網(wǎng)頁(yè)上面會(huì)用IFrame去嵌套別的頁(yè)面,這些頁(yè)面可能不是在相同域名下的,這時(shí)就會(huì)出現(xiàn)跨域問(wèn)題,無(wú)法直接在WebBrowser中獲取到IFrame中的元素,接下來(lái)介紹如何解決此問(wèn)題,需要了解的朋友可以參考下2012-12-12