複製** **如下:
if request.form("securitycode") = session("securitycode") then
' todo : database operations
else
response.write "security code incorrect!" 程式設計客棧
end if
%>
驗證碼產生ses程式設計客棧sion("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)end function
if issecuritycodevalid(request.form("securitycode"), 4) and _
issecuritycodevalid(session("securitycode")www.cppcns.com, 4) and _
request.form("securitycode") = session("securitycode") then
' todo : database operations
else
response.write "security code incorrect!"
end if
本文標題: 安全校驗session驗證碼並避免繞開驗證碼攻擊
本文位址: /wangluo/xiangguanjiqiao/85883.html
生成前端驗證碼並校驗
驗證碼生成器類,可生成數字 大寫 小寫字母及三者混合型別的驗證碼。支援自定義驗證碼字元數量 支援自定義驗證碼的大小 支援自定義需排除的特殊字元 支援自定義干擾線的數量 支援自定義驗證碼 顏色 public class validatecode 生成驗證碼,給外部程式呼叫 param type 驗證碼...
驗證碼校驗
問題 隨機生成一組驗證碼,輸入並比較是否輸入正確。定義驗證字元 char ver 計算陣列長度 int length sizeof ver sizeof char 產生隨機數下標 byte n1 arc4random length byte n2 arc4random length byte n3 ...
驗證碼安全
目錄後端未對單次驗證碼的有效時間和有效次數限制 或者驗證碼僅在前端校驗,後端不校驗 導致單次驗證碼可多次使用 造成賬號密碼可被列舉 影響驗證碼大小的引數前端可控,如引數在url中 導致可修改引數並利用burp批量發包 造成ddos消耗伺服器資源 後端未對動態驗證碼如簡訊驗證碼的有效域或歸屬做嚴格限定...