
沒有進(jìn)行非空判斷
這種情況可以直接用代碼來說明:
if (Request["captcha"] == Session["captcha"] as string)
{
// 驗證通過,繼續(xù)操作
}
假設(shè)用戶繞過了系統(tǒng)提供的表單直接提交數(shù)據(jù),此時驗證碼還沒生成,Session["captcha"]為空。用戶不提交驗證碼時,Request["captcha"]也為空。于是,驗證通過了。
要解決這個問題,其實只要加個非空判斷就可以了:
if (!String.IsNullOrEmpty(Request["captcha"]) &&
Request["captcha"] == Session["captcha"] as string)
{
// 驗證通過,繼續(xù)操作
}
沒有及時銷毀驗證碼
使用驗證碼要遵循一個原則,在一次比對之后,無論用戶輸入正確與否,都要立刻將驗證碼銷毀。
如果不這樣做,就可以出現(xiàn)以下情況: