0x00 前言

我们最近开发了一个网站,因为是给学校开发的,里面难免会设计学生的一些隐私数据,而老师或者学院为了省事等一些原因,密码往往设置的会比较简单,为了防止用户密码被爆破,我们在网站上加上了验证码机制。
(PS: 验证码怎么可能会设置的如此简单:),当然是做了一波不可描述的操作啦(≧∇≦))访问页面

0x01 验证码频繁错误?

在Windows服务器上部署之后,(啥?Windows?Windows怎么啦?Windows就是无敌,配上宇宙最强IIS,不服你来咬我啊,对,我还用的Python开发的 →_→,人生苦短,我用Python,关于Windows部署Django,可以参考我另外一篇文章)。回到正题,反馈最多的结果竟然是后台登不上去了,出现频繁的验证码错误,起初因为有些用户是可以登陆的,而且后台开发的时候我们做了一些调试,所以我认为是我的代码加密机制存在缺陷,致使部分浏览器无法正常运行那个不可描述的操作。但是,同开发组的说网站代码在未加密状态下也出现了验证码错误,引起了我的重视。
打开Firefox Develop Edition浏览器,登陆后台,验证码错误,重复10结果相同,What?!
验证码❌?!
于是打开抓包工具,看看在请求的时候是不是出了什么问题。

果不其然,Firefox在访问一次这个页面的时候,出现了两次请求,没错,就是两次,,但是浏览器之渲染了第一次请求的验证码。因为验证码是随网页同时返回的,也就是用户看到页面渲染完成之后,验证码已经被再次更新了!!!!用户拿到的是已过期的验证码,这也就是为什么验证码频繁错误的原因。同样,我们复现尝试Chrome,360安全浏览器这两款在我们学校用的比较多的浏览器,发现这个问题是很不确定的发生,也就造成了为什么有的老师没有问题,而有的老师问题很频繁。

0x03 解决方案

既然找到了问题的原因,又由于这个问题的出现是属于“上帝掷骰子”,于是我采取了一种可以彻底解决这个问题的方案,把验证码单独拿出来,就是不在跟随页面返回而返回,把验证码单独放到一个网址里面。这样,浏览器在访问这个网址的时候,验证码是单独加载的,就可以很大程度的避免出现验证码过期的问题了。

图片都被我给吃了,所以这个地方没有图片了,【尴尬】

0x04 后记

其实,在开发的时候,验证码是不应该随页面同时返回的,这并不符合开发的一些常识规范,因为之前的偷懒,出现了这样的错误,当然也发现了浏览器在部分情况下出现了多次请求的事情。

OK,本文到此为止。哼~不打个赏点个赞的嘛。