較為全面的Asp.net提交驗證方案分析 (上)

來源:互聯網
上載者:User

比如:
驗證碼儲存在頁面代碼或Cookies裡,暴露給用戶端;
通過Session儲存的驗證碼,雖然解決了安全問題,但一個使用者只使用一個變數儲存驗證碼,假如使用者同時開啟一個以上的頁面,分別提交的話,就無法正常使用了;
驗證碼不會到期,這會留下隱患,使暴力破解變得可行(當然也可以通過重新整理間隔、提交間隔、黑名單等手段加以控制);
此外還有伴隨著提交產生的另一個問題——重複提交。
為解決上述問題,我曾走過不少彎路,後來總結出了一個方案可以很好的解決這些問題,本文將結合ADO.NET Entity Framework技術來介紹此方案:
這方案的核心就是通過資料庫統一儲存所有請求頁面所對應的驗證碼及其相關資訊(這也可以通過Session或別的什麼實現,但個人感覺資料庫更為優秀)。
首先來建立一個這樣的SQL Server資料表,表名設為“提交驗證”:

“ID”欄位儲存的是該驗證資訊的唯一ID,用於查詢,並且我們還會將此值傳給用戶端用於回傳時再度擷取對應的資訊,採用GUID格式保證了唯一性和複雜性,用戶端幾乎沒有偽造的可能;

“會話ID”欄位即用於儲存SessionID,以確保驗證資訊與使用者會話相對應,如果你不在意用戶端是否會被劫持的話,也可以忽略這個欄位。

“驗證碼”欄位即儲存驗證碼原文,用於檢驗使用者輸入,此外,驗證圖片產生函數也會通過ID擷取此資料以產生對應的驗證圖片。

“是否已提交”欄位標識此驗證資訊是否已使用過,如果不需要給使用者明確的錯誤提示的話,可以在提交後直接刪除所使用的驗證資訊,而不使用這個欄位。

“到期時間”欄位的資料將會在清理逾時資訊時使用到。

資料庫建好後,就可以建立ADO.NET Entity Framework資料模型(EDM)了:

此模型從現有資料庫直接產生即可,不需要做什麼額外改動。未完待續,此篇中介紹了資料結構和思路,在下篇中將介紹代碼實現以及使用方法。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.