|
|
51CTO旗下网站
|
|
移动端

验证码的几个常见缝隙

一般来说,咱们会把验证码的值用Session存储起来,经过比照用户提交的验证码和Session中的验证码,就能够知道输入是否正确。

作者:IT生计来历:今天头条|2019-06-18 07:12

把验证码存储在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过期之前,他就能够一向用这个验证码经过验证。

【修改引荐】

  1. 的12个不可告人的隐秘
  2. 对称与进犯事例剖析
  3. 怎么维护网络远离微软NTLM协议中的安全缝隙?
  4. Vim 和 NeoVim 文本修改器曝出高危缝隙
  5. SSRF缝隙学习试验环境引荐及进程记载
【责任修改:赵宁宁 TEL:(010)68476606】

点赞 0
共享:
咱们都在看
猜你喜爱

订阅专栏+更多

20个局域网建造改造事例

20个局域网建造改造事例

网络建立技巧
共20章 | 捷哥CCIE

405人订阅学习

WOT2019全球人工智能技能峰会

WOT2019全球人工智能技能峰会

通用技能、运用领域、企业赋能三大章节,13大技能专场,60+国内外一线人工智能精英大咖站台,共享人工智能的渠道东西、算法模型、语音视觉等技能主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

Spring Boot 爬虫查找轻松游

Spring Boot 爬虫查找轻松游

全栈式开发之旅
共4章 | 美码师

91人订阅学习

读 书 +更多

SOA概念、技能与规划

在本书中,Thomas ERL出现了榜首部端对端的教程,供给了从底层开端的面向服务的建模与规划的逐渐辅导。经过逐渐的、明晰生动的、杰出的SOA...

订阅51CTO邮刊

点击这儿检查样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客