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

首頁 > 開發 > 綜合 > 正文

安全校驗Session驗證碼并避免繞開驗證碼攻擊

2024-07-21 02:02:29
字體:
來源:轉載
供稿:網友
已經記不得是在哪個網站上看到的了,一般情況下對于驗證碼的校驗,大家很容易寫成下面這樣:
復制代碼 代碼如下:

<%
If Request.Form("SecurityCode") = Session("SecurityCode") Then
' TODO : Database operations
Else
Response.Write "Security code incorrect!"
End If
%>

驗證碼圖片產生Session("SecurityCode")并保存正確的驗證碼值,然后獲得用戶提交的驗證碼值,然后兩個一比對如果一樣則表示驗證碼正確,否則驗證碼錯誤。表面上這樣的算法沒有什么問題,但是對于一種特殊情況則會讓驗證碼形同虛設。
首先我們知道,對于上面的算法有個核心的地方就是我們要訪問產生驗證碼圖片的那個文件才會有個保存驗證碼值的Session,然后才能對用戶的輸入進行正確的比對,假如有心人構造一個繞開驗證碼圖片文件的Form然后進行提交會得到什么呢?Session("SecurityCode")不存在為空,如果此時用戶驗證碼什么都不輸入,這時驗證碼校驗就形同虛設了。好,這里利用漏洞攻擊的關鍵就是驗證碼的Session,我們很容易就能夠讓服務器不產生這個Session從而使這樣的攻擊變成可能。
解決的方法也很容易,校驗驗證碼的Session是否為空或者校驗用戶輸入的驗證碼是否合法,構造安全表單的關鍵就是永遠不要相信用戶的輸入。下面采用校驗驗證碼Session和用戶輸入的雙保險辦法解決這個安全問題:
復制代碼 代碼如下:

' str為要校驗的驗證碼,len為驗證碼長度
Function IsSecurityCodeValid(str, len)
IsSecurityCodeValid = Not CBool( _
IsEmpty(str) Or CStr(str)="" Or Len(str)<len)
End Function
If IsSecurityCodeValid(Request.Form("SecurityCode"), 4) AND _
IsSecurityCodeValid(Session("SecurityCode"), 4) AND _
Request.Form("SecurityCode") = Session("SecurityCode") Then
' TODO : Database operations
Else
Response.Write "Security code incorrect!"
End If
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安吉县| 宁化县| 九寨沟县| 克拉玛依市| 时尚| 鄂托克旗| 砀山县| 贡嘎县| 天水市| 乡城县| 铁力市| 卢氏县| 淮安市| 鄢陵县| 博野县| 绍兴县| 灵石县| 万宁市| 新田县| 顺平县| 湖口县| 张家川| 莱西市| 都匀市| 高雄县| 奉节县| 资溪县| 绥德县| 浦城县| 桃园市| 白沙| 杭锦旗| 阳高县| 贞丰县| 宣恩县| 吉安县| 类乌齐县| 元朗区| 达拉特旗| 会泽县| 阿克苏市|