[转] 验证码的几个常见漏洞
原文: http://www.blogread.cn/it/article/5016 把验证码存储在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"]也为空 。于是,验证通过了。 要解决这个问题