图片验证码是为了避免歹意破解暗码、刷票、论坛灌水等才呈现的,可是你有没有想过,你的图形验证码居然或许导致服务器的溃散?
那他是怎么导致的呢?请听我婉婉道来。
先看看各大渠道对待此缝隙的情绪:
运用进程
这儿以phpcms为例,首要需求找一个图形验证码。
将图片拖动到浏览器中将得到该图形验证码的链接:
将链接拖出来咱们剖析一下:
http://127.0.0.1/phpcms/api.php?op=checkcode&code_len=4&font_size=20&width=130&height=50&font_color=&background=
code_len=4是验证码的字符的个数
font_size=20是验证码的巨细
width=130是验证码的宽
height=50是验证码的高
假如将参数font_size、width、height均设置为1000将会呈现什么情况呢?
能够发现验证码的形状现已改动,证明这个参数是会跟着咱们的更改而更改的,并且在改成1000时,整个页面的加载速度显着变慢,咱们请想,假如都改为10000乃至更高会发作什么事情? 服务器会不会一直在处理咱们所恳求的图片?
此刻咱们上神器burp来查验一下
当设置为1000时:
当设置为10000时:
处理所用的时刻显着增加,咱们再看看在建议这个恳求时CPU有什么反响:
CPU有一个显着的峰值,那当咱们运用python去不断进行恳求的时分又会发作什么?这个是正常情况下的CPU占用率:
当咱们发动python程序的时分CPU的占用率:
可见,咱们恳求的验证码对服务器产生了严重的影响。
代码剖析
依据恳求包咱们跟进到 apicheckcode.php:
在第12行和第17行能够看到,只是将验证码的长宽经过get方法承受,没有任何其他的过滤,在第13行和第18行也只是只对最小值进行了约束,并没有对最大值进行约束,所以就造成了这个验证码的缝隙。
总结一下这个缝隙的运用点:
1.图片长宽等可控
2.后端没有对图片的最大巨细进行约束
解决方案
1.对承受的参数进行最大值的操控,或许固定值处理
2.运用固定巨细的验证码