驗證碼的三個常見漏洞和修復方法

2022-09-28 07:03:09 字數 1091 閱讀 4170

把驗證碼儲存在cookie中

一般來說,我們會把驗證碼的值用session儲存起來,通過對比使用者提交的驗證碼和session中的驗證碼,就可以知道輸入是否正確。由於session會占用伺服器資源,我曾經想過是否可以把驗證碼的值加密後儲存在cookie中。不過事實證明,這只是異想天開罷了。

假設驗證碼的值是a,通過sha1加密後得到的值為b = sha1(a),並且把b儲存在cookie中。而使用者提交的驗證碼值為c,通過判斷sha1(c)是否與b相等,可以知道輸入的驗證碼是否正確。然而,cookie是受客戶端控制的。如果使用者事先通過肉眼看到驗證碼的值是a,又從cookie中得知此時的加密值為b,那麼,他只要在提交前把cookie的值修改為b,提交的驗證碼值為a,就可以永遠通過驗證。

沒有進行非空判斷

這種情況可以直接用**來說明:

複製** **如下:

if (request["captcha"] == session["captcha"] as string)

假設使用者繞過了系統提供的表單直接提交資料,此時驗證碼還沒生成,session["captcha"]為空。使用者不提交驗證碼時,request["captcha"]也為空。於是,驗證通過了。

要解決這個問題,其實只要加個非空判斷就可以了:

複製** **如下:

if (!string.isnullorempty(request["captcha"]) &&

request["captcha"] == spmkhdxkrnession["captcha"] apmkhdxkrns string)

沒有及時銷毀驗證碼

使用驗證碼要遵循乙個原則,在一次比對之後,無論使用者輸入正確與否,都要立刻將驗證碼銷毀。

如果不這樣做,就可以出現以下情況:

假設使用者輸入錯誤,且驗證碼沒有重新生成,那麼他就可以一直嘗試,直到正確為止。雖然機器對的一次性識別率比較低,但是,如果同一張你給它無限次機會的話,它還是可以識別出來的。

假設使用者輸入成功,且驗證碼沒有銷毀,那pmkhdxkrn麼在session過期之前,他就可以一直用這個驗證碼通過驗證。

本文標題: 驗證碼的三個常見漏洞和修復方法

本文位址: /ruanjian/csharp/120211.html

如何識別高階的驗證碼 三 常見的驗證碼的破解分析

三 常見的驗證碼的破解分析 以http libcaca.zoy.org wiki pwntcha這裡pwntcha專案中的資料為例分析,各種驗證碼的破解。方法很多,僅僅從我個人乍看之下覺得可行的方法來分析 1 authimage 使用的反破解技巧 1.不連續的點組成字元 2.有一定程度的傾斜 設計不...

PHP算式驗證碼和漢字驗證碼的實現方法

在php 開發中,驗證碼可以有效地保護我們的表單不被惡意提交,但是如果不使用算式驗證碼或者漢字驗證碼,僅僅使用簡單的字母或者數字驗證碼,這樣的驗證碼方案真的安全嗎?大家知道簡單數字或者字母驗證碼很容易被破解,但是算式驗證碼或者中文漢字驗證碼不容易被破解,所以建議大家在使用驗證碼的時候,盡量用算式驗證...

字串中常見的三個擷取子串的有趣方法

首先,我們建立乙個字串,如 var str 我是一名前端開發工作者 ok!建立好了乙個字串後,先來介紹一下本次要說的三個方法,都是用來擷取字串子串的方法,分別是slice substring substr 三個 首先,三個方法都有著一些共同點,比如 1 都有兩個引數,其中乙個為可選引數 2 返回的都...