安全校驗Session驗證碼并避免繞開驗證碼攻擊
更新時間:2012年01月08日 18:58:00 作者:
校驗驗證碼的Session是否為空或者校驗用戶輸入的驗證碼是否合法,構(gòu)造安全表單的關(guān)鍵就是永遠(yuǎn)不要相信用戶的輸入
已經(jīng)記不得是在哪個網(wǎng)站上看到的了,一般情況下對于驗證碼的校驗,大家很容易寫成下面這樣:
<%
If Request.Form("SecurityCode") = Session("SecurityCode") Then
' TODO : Database operations
Else
Response.Write "Security code incorrect!"
End If
%>
驗證碼圖片產(chǎn)生Session("SecurityCode")并保存正確的驗證碼值,然后獲得用戶提交的驗證碼值,然后兩個一比對如果一樣則表示驗證碼正確,否則驗證碼錯誤。表面上這樣的算法沒有什么問題,但是對于一種特殊情況則會讓驗證碼形同虛設(shè)。
首先我們知道,對于上面的算法有個核心的地方就是我們要訪問產(chǎn)生驗證碼圖片的那個文件才會有個保存驗證碼值的Session,然后才能對用戶的輸入進行正確的比對,假如有心人構(gòu)造一個繞開驗證碼圖片文件的Form然后進行提交會得到什么呢?Session("SecurityCode")不存在為空,如果此時用戶驗證碼什么都不輸入,這時驗證碼校驗就形同虛設(shè)了。好,這里利用漏洞攻擊的關(guān)鍵就是驗證碼的Session,我們很容易就能夠讓服務(wù)器不產(chǎn)生這個Session從而使這樣的攻擊變成可能。
解決的方法也很容易,校驗驗證碼的Session是否為空或者校驗用戶輸入的驗證碼是否合法,構(gòu)造安全表單的關(guān)鍵就是永遠(yuǎn)不要相信用戶的輸入。下面采用校驗驗證碼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
復(fù)制代碼 代碼如下:
<%
If Request.Form("SecurityCode") = Session("SecurityCode") Then
' TODO : Database operations
Else
Response.Write "Security code incorrect!"
End If
%>
驗證碼圖片產(chǎn)生Session("SecurityCode")并保存正確的驗證碼值,然后獲得用戶提交的驗證碼值,然后兩個一比對如果一樣則表示驗證碼正確,否則驗證碼錯誤。表面上這樣的算法沒有什么問題,但是對于一種特殊情況則會讓驗證碼形同虛設(shè)。
首先我們知道,對于上面的算法有個核心的地方就是我們要訪問產(chǎn)生驗證碼圖片的那個文件才會有個保存驗證碼值的Session,然后才能對用戶的輸入進行正確的比對,假如有心人構(gòu)造一個繞開驗證碼圖片文件的Form然后進行提交會得到什么呢?Session("SecurityCode")不存在為空,如果此時用戶驗證碼什么都不輸入,這時驗證碼校驗就形同虛設(shè)了。好,這里利用漏洞攻擊的關(guān)鍵就是驗證碼的Session,我們很容易就能夠讓服務(wù)器不產(chǎn)生這個Session從而使這樣的攻擊變成可能。
解決的方法也很容易,校驗驗證碼的Session是否為空或者校驗用戶輸入的驗證碼是否合法,構(gòu)造安全表單的關(guān)鍵就是永遠(yuǎn)不要相信用戶的輸入。下面采用校驗驗證碼Session和用戶輸入的雙保險辦法解決這個安全問題:
復(fù)制代碼 代碼如下:
' 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
相關(guān)文章
vscode配置leetcode插件并解決無法登錄問題(圖文詳解)
這篇文章主要介紹了vscode配置leetcode插件并解決無法登錄問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06OB系統(tǒng)變量Variables及ODC管理會話功能詳解
這篇文章主要為大家介紹了OB系統(tǒng)變量Variables及ODC管理會話功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12scratch-www 在Win10下的環(huán)境搭建詳細(xì)教程
scratch-www是scratch-gui的網(wǎng)頁版,功能包括gui的編輯,保存,播放,和gui的作品展示,這里主要介紹scratch-www在window系統(tǒng)下的安裝和運行,感興趣的朋友跟隨小編一起看看吧2021-08-08