验证码的几个常见漏洞

把验证码存储在Cookie中

成都创新互联公司服务项目包括望花网站建设、望花网站制作、望花网页制作以及望花网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,望花网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到望花省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

一般来说,我们会把验证码的值用Session存储起来,通过对比用户提交的验证码和Session中的验证码,就可以知道输入是否正确。由于Session会占用服务器资源,我曾经想过是否可以把验证码的值加密后存储在Cookie中。不过事实证明,这只是异想天开罢了。

假设验证码的值是a,通过sha1加密后得到的值为b = sha1(a),并且把b存储在Cookie中。而用户提交的验证码值为c,通过判断sha1(c)是否与b相等,可以知道输入的验证码是否正确。然而,Cookie是受客户端控制的。如果用户事先通过肉眼看到验证码的值是a,又从Cookie中得知此时的加密值为b,那么,他只要在提交前把Cookie的值修改为b,提交的验证码值为a,就可以永远通过验证。

没有进行非空判断

这种情况可以直接用代码来说明:

 
 
 
  1. if (Request["captcha"] == Session["captcha"] as string) 
  2.  // 验证通过,继续操作 

假设用户绕过了系统提供的表单直接提交数据,此时验证码还没生成,Session["captcha"]为空。用户不提交验证码时,Request["captcha"]也为空。于是,验证通过了。

要解决这个问题,其实只要加个非空判断就可以了:

 
 
 
  1. if (!String.IsNullOrEmpty(Request["captcha"]) && 
  2.  Request["captcha"] == Session["captcha"] as string) 
  3.  // 验证通过,继续操作 

没有及时销毁验证码

使用验证码要遵循一个原则,在一次比对之后,无论用户输入正确与否,都要立刻将验证码销毁。

如果不这样做,就可以出现以下情况:

  • 假设用户输入错误,且验证码没有重新生成,那么他就可以一直尝试,直到正确为止。虽然机器对图片的一次性识别率比较低,但是,如果同一张图片你给它很多次机会的话,它还是可以识别出来的。
  • 假设用户输入成功,且验证码没有销毁,那么在Session过期之前,他就可以一直用这个验证码通过验证。

本文题目:验证码的几个常见漏洞
网站路径:http://www.mswzjz.com/qtweb/news28/175278.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联