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

首頁 > 編程 > C# > 正文

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

2020-01-24 02:08:28
字體:
來源:轉載
供稿:網友

把驗證碼存儲在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"] == Session["captcha"] as string)
{
    // 驗證通過,繼續操作
}

沒有及時銷毀驗證碼

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

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

假設用戶輸入錯誤,且驗證碼沒有重新生成,那么他就可以一直嘗試,直到正確為止。雖然機器對圖片的一次性識別率比較低,但是,如果同一張圖片你給它無限次機會的話,它還是可以識別出來的。
假設用戶輸入成功,且驗證碼沒有銷毀,那么在Session過期之前,他就可以一直用這個驗證碼通過驗證。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 慈利县| 扎赉特旗| 西昌市| 德州市| 叶城县| 苍南县| 二连浩特市| 盐亭县| 休宁县| 肥东县| 云南省| 宁乡县| 晋宁县| 尼玛县| 苏尼特左旗| 焦作市| 县级市| 邢台县| 公主岭市| 英德市| 凭祥市| 子长县| 通江县| 巴东县| 铜鼓县| 东山县| 大连市| 阿瓦提县| 宝坻区| 崇左市| 无极县| 潢川县| 高平市| 贵港市| 内丘县| 宜兰县| 蒙城县| 龙泉市| 鄂托克前旗| 开化县| 迁安市|