没有进行非空判断
这种情况可以直接用代码来说明:
if (Request["captcha"] == Session["captcha"] as string)
{
// 验证通过,继续操作
}
假设用户绕过了系统提供的表单直接提交数据,此时验证码还没生成,Session["captcha"]为空。用户不提交验证码时,Request["captcha"]也为空。于是,验证通过了。
要解决这个问题,其实只要加个非空判断就可以了:
if (!String.IsNullOrEmpty(Request["captcha"]) &&
Request["captcha"] == Session["captcha"] as string)
{
// 验证通过,继续操作
}
没有及时销毁验证码
使用验证码要遵循一个原则,在一次比对之后,无论用户输入正确与否,都要立刻将验证码销毁。
如果不这样做,就可以出现以下情况: