把验证码存储在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)
- {
- // 验证通过,继续操作
- }
没有及时销毁验证码
使用验证码要遵循一个原则,在一次比对之后,无论用户输入正确与否,都要立刻将验证码销毁。
如果不这样做,就可以出现以下情况:
网页名称:验证码的几个常见漏洞
网站地址:http://www.shufengxianlan.com/qtweb/news28/175278.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联