当前位置:网站首页>验证码业务逻辑漏洞
验证码业务逻辑漏洞
2022-08-04 02:15:00 【MUNG东隅】
简单学习了一下php的gd库,也就是图形处理,主要是验证码相关的。
验证码可以有效防止暴力破解,也可以用来防止恶意灌水、广告贴等,原理就是生成验证码的时候也会生成一个字符串到session中,然后用户根据图片进行输入、提交,再判断是否能和session中的值匹配上,通常验证码图片会加入一些噪点、干扰线等。验证码的机器识别大概分为四个步骤,取出字模、二值化、计算特征、对照样本,可以采用让验证码更“乱”的方式提高安全性,比较高级的是通过神经网络进行识别,但是这样学习成本太高。
另外,如果验证码仅仅为4位纯数字这样,也是非常容易被暴力破解,尝试10000次一定能破解一个验证码,利用爆破工具,设置上几十个线程,破解只需要几分钟,建议采用非纯数字且6位的验证码。
空验证码突破:大多数验证码的生命周期是这样的:用户访问页面,生成code并保存到session中,用户提交验证码,服务端进行对比。试想,如果我们不去访问页面,二十直接提交表单,这个时候服务端是没有产生code的,当我们提交表单的验证码为空,正好和服务端对应,php是弱类型语言,就绕过了验证码。就像下面这个逻辑:
<?php if($_POST["code"]!=$_SESSION["code"]){ unset($_SESSION["code"]); return['status'=>false,'msg'=>'验证失败']; } return['status'=>'ture','msg'=>'验证成功'];
它在验证失败以后把session里的code删掉了,而这个时候我们直接repeat,就可以打这个漏洞。
另外还有一个逻辑漏洞,就是很多网站为了方便用户,在他们第一次登录无需验证码,如果这个“第一次”的判断条件是我们可控的,比如cookie,我们删掉以后就可以绕过。
边栏推荐
猜你喜欢
Flutter3.0线程——四步教你如何全方位了解(事件队列)
【云原生】DevOps(六):Jenkins流水线
第08章 索引的创建与设计原则【2.索引及调优篇】【MySQL高级】
C program compilation and predefined detailed explanation
Example 039: Inserting elements into an ordered list
v-model
Parquet encoding
贪吃蛇游戏Bug解析及功能扩展
this巩固训练,从两道执行题加深理解闭包与箭头函数中的this
Qt中对象树的机制介绍以及底层实现,各种结果分析:(以及自己写容易犯错的点)
随机推荐
持续投入商品研发,叮咚买菜赢在了供应链投入上
5. Scrapy middleware & distributed crawler
pytorch应用于MNIST手写字体识别
sudo 权限控制,简易
[QNX Hypervisor 2.2 User Manual] 10.3 vdev gic
P3384 【模板】轻重链剖分/树链剖分
flinkcdc 消费 mysql binlog 没有 sqltype=delete 的数据是什么原
DDTL: Domain Transfer Learning at a Distance
简单排序(暑假每日一题 14)
2022年茶艺师(中级)考试试题模拟考试平台操作
实例041:类的方法与变量
持续投入商品研发,叮咚买菜赢在了供应链投入上
深度学习(三)分类 理论部分
Engineering drawing review questions (with answers)
QNX Hypervisor 2.2用户手册]10.1 通用vdev选项
Example 037: Sorting
Sky map coordinate system to Gaode coordinate system WGS84 to GCJ02
Flask Framework Beginner-06-Add, Delete, Modify and Check the Database
5.scrapy中间件&分布式爬虫
Small Turtle Compilation Notes