验证码常见安全问题与测试方法汇总

news2025/1/10 11:37:16

系统使用验证码主要是意图一般有两个个目的,即辅助身份验证(短信或邮箱验证码)和防止攻击者利用自动化脚本恶意攻击网站(数字,图片,视频,行为式等验证码)。

验证码的生命周期

验证码的目的为辅助验证和防止脚本攻击,其生成和销毁的时机以及其是否容易被攻击者猜测和破解是其能否达成设计目的的根本
Step 1:后端识别验证码生成时机,并生成验证码,并设置其失效时机,将验证码返回给用户
Step 2:用户使用验证码进行对应验证操作
Step 3:验证完成后(无论对应验证请求是成功还是失败),验证码销毁,再次使用此验证码进行验证时将作为无效验证码处理
Step 4:到达验证码失效时间后,验证码销毁,再次使用此验证码进行验证时将作为无效验证码处理
以下为验证码设计中常见安全缺陷,在没有特殊标识的情况下,“验证码”指所有验证码

常见问题汇总

验证码由前端生成

验证码由客户端生成是指前端的JS生成验证码并在前端验证,或者将前端生成的样子内容发送给后端工段进行验证,这样的方式并不安全,因为前端的安全性无法保证,攻击者可以篡改JS代码或绕过客户端验证,或固定验证码内容来进行验证码的绕过。

严重程度

测试方法

1、观察在获取验证码过程是否给后端发送请求,并由后端返回验证码信息,如没有给后端发送请求则存在安全问题

修复建议

验证码的生成也验证都应在后端进行
出现阶段:Step 1:后端识别验证码生成时机,并生成验证码,并设置其失效时间,将验证码返回给用户

重复的获取短信验证码

在设计短信验证码时没有对短信验证码的请求频次进行限制,导致攻击者可以利用次特性进行短信轰炸,或耗尽服务资源

严重程度

测试方法

短时间内多次重发获取短信验证码请求,观察响应信息以及短信是否被发送多次,如短信发送多次则存在安全问题

修复建议

1、限制单个IP的验证码获取次数。
2、在获取验证码时增加其他类型验证码,提升重复获取成本
出现阶段:Step 1:后端识别验证码生成时机,并生成验证码,并设置其失效时间,将验证码返回给用户

已被识别的验证码

这个属于最简单的验证码,过于简单、清晰、可识别性高,可以编写程序进行识别,导致验证码防御体系失效

严重程度

测试方法

1、观察验证码有无干扰元素,或干扰元素过少,如下;此类已被识别
![[Pasted image 20231031103512.png]]
在这里插入图片描述
在这里插入图片描述

修复建议

1、增加验证码的复杂性:可以增加验证码的图片干扰元素,例如线条、文字、背景等,以增加OCR识别的难度。
2、限制请求频率:可以限制用户请求验证码的频率,例如每分钟只能请求一次验证码,以防止暴力破解。
3、较为重要的系统建议使用交互行验证码
出现阶段:Step 1:后端识别验证码生成时机,并生成验证码,并设置其失效时间,将验证码返回给用户

验证码明文出现在Response中

获取验证码的请求中,验证码信息明文出现在Response中,攻击者可以直接读取Response中的验证码字段进行下一步的攻击。

严重程度

测试方法

查看获取验证码请求的响应信息,如存在明文验证码信息则存在安全问题

修复建议

验证码不可明文出现在Response中
出现阶段:Step 1:后端识别验证码生成时机,并生成验证码,并设置其失效时间,将验证码返回给用户

验证码可以爆破

由于验证码设置比较简单,可能只有数字或字母组成,也可能是其设定范围有限,导致验证码的数量一共就那么几个,内容可以被猜测。此时服务端未对验证时间、次数作出限制,故存在爆破的可能性。

  • 例:对于4位纯数字验证码:从0000~9999的10000种可能用多线程在5分钟内跑完并不是很难。
    如果验证码组成相对复杂,如6位验证码,或字母与数字组合则爆破难度则很高,导致攻击成本也提升很多,例如6位的纯数字验证码的验证时间为4位纯数字验证码的100倍
严重程度

测试方法

多次尝试获取验证码观察验证码组成,如验证码组成相对简单,如4位纯数字验证码则进行爆破操作,观察后端是否有爆破限制

修复建议

1、根据系统重要程度合理设计验证码负责程度
2、对于验证码构成简单,建议设计防爆破机制
出现阶段:Step 2:用户使用验证码进行对应验证操作

验证码绕过

验证码绕过是指对应验证请求中存在某个控制字段,通过控制该字段的值可以控制是否打开验证码验证功能,攻击者控制了该字段也就验证码的绕过。

严重程度

测试方法

1、检查从请求体是否有除必要验证字段外的可疑字段,尝试分析修改可疑字段观察响应结果,如可以通过控制字段绕过验证码的校验即存在安全问题。
2、检查直接删除验证码字段,请求是否可以成功处理
此处较为有效的方式为使用白盒或灰盒方式审计接口的设计中有无验证码控制字段,通过拦截请求一般较为容易遗漏

修复建议

出现阶段:Step 2:用户使用验证码进行对应验证操作

验证码重用

验证码重用是指,验证码在使用后没进行销毁,导致攻击者可以反复利用验证码进行爆破,从而失去了验证码的真正作用,验证码未失效分为两种情况。

  • 对应验证操作成功后,验证码未失效
  • 对应验证操作失败后,验证码未失效
严重程度

测试方法

1、使用正确的用户密码,输入验证码进行验证,拦截请求进行回放,如两次验证请求均成功则说明验证码存在重用问题。
2、使用错误的用户密码,输入验证码进行验证,拦截请求进行回放,如两次验证请求均成功则说明验证码存在重用问题。

修复建议

验证码在使用后必须进行失效处理
出现阶段:Step 3:验证完成后(无论对应验证请求是成功还是失败),验证码销毁,再次使用此验证码进行验证时将作为无效验证码处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1232540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

会议剪影 | 思腾合力受邀出席第四届长三角文博会并作主题演讲

以“担当新使命:长三角文化产业的力量”为主题的「第四届长三角国际文化产业博览会」于2023年11月16日-19日在国家会展中心(上海)成功举办。思腾合力作为行业领先的人工智能基础架构解决方案商出席本次盛会。 此次展会的面积首次超过10万平米&#xff0c…

Flask Web开发:数据库

目录 在虚拟环境中安装Flask-SQLAlchemy: 一、配置 数据库配置示例: 二、定义模型 Role 和 User 模型代码: (1)常用的 SQLAlchemy 列类型:​编辑 (2)常用的 SQLAlchemy 列选项…

AD9361寄存器功能笔记之本振频率设定

LO的产生过程如图: 各个模块都有高灵活性。 1、参考时钟即是AD9361全局参考时钟,可以是外接晶振的片上DCXO,或是外部输入的有驱动能力的时钟信号。根据FM-COMMS5的设计,参考时钟可以使用时钟Buffer 40MHz晶振构成的参考频率源。 …

基于springboot实现智能热度分析和自媒体推送平台系统项目【项目源码】计算机毕业设计

基于springboot实现智能热度分析和自媒体推送平台演示 系统开发平台 在该自媒体分享网站中,Eclipse能给用户提供更多的方便,其特点一是方便学习,方便快捷;二是有非常大的信息储存量,主要功能是用在对数据库中查询和编…

【Java基础】Java导Excel攻略

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

BUUCTF [BJDCTF2020]鸡你太美 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。来源: https://github.com/BjdsecCA/BJDCTF2020 密文: 下载附件,解压得到两个.gif图片。 第一个gif图片: 第二个gif图片无法打开。…

Linux常用命令——builtin命令

在线Linux命令查询工具 builtin 执行shell内部命令 补充说明 builtin命令用于执行指定的shell内部命令,并返回内部命令的返回值。builtin命令在使用时,将不能够再使用Linux中的外部命令。当系统中定义了与shell内部命令相同的函数时,使用…

禁止linux shell 终端显示完整工作路径,如何让linux bash终端不显示当前工作路径

在操作linux时,默认安装的linux终端会显示当前完整的工作目录,如果目录比较短还是可以接收,如果目录比较长,就显得比较别扭,操作起来不方便,因此需要关闭这种功能。 要关闭这个功能,请按如下步骤…

Conditional GAN

Text-to-Image 对于根据文字生成图像的问题,传统的做法就是训练一个NN,然后输入一段文字,输出对应一个图片,输出图片与目标图片越接近越好。存在的问题就是,比如火车对应的图片有很多张,如果用传统的NN来训…

NX二次开发UF_CAM_ask_lower_limit_plane_data 函数介绍

文章作者:里海 来源网站:里海NX二次开发3000例专栏 UF_CAM_ask_lower_limit_plane_data Defined in: uf_cam_planes.h int UF_CAM_ask_lower_limit_plane_data(tag_t object_tag, double origin [ 3 ] , double normal [ 3 ] ) overview 概述 Query …

人工智能的广泛应用与影响

目录 前言1 智能手机与个人助手2 医疗保健3 自动驾驶技术4 金融领域5 教育与学习6 智能家居与物联网7 娱乐与媒体8 环境保护结语 前言 人工智能(Artificial Intelligence,AI)是当今科技领域的璀璨明星,它不仅在技术创新方面掀起了…

适合小白的超详细yolov8环境配置+实例运行教程,从零开始教你如何使用yolov8训练自己的数据集(Windows+conda+pycharm)

目录 一、前期准备所需环境配置 1.1. 虚拟环境创建 1.2 下载yolov8源码,在pycharm中进行配置 1.2.1 下载源码 1.2.2 在pycharm终端中配置conda 1.3 在pycharm的terminal中激活虚拟环境 1.4 安装requirements.txt中的相关包 1.5 pip安装其他包 1.6 预训练…

如果在手机没有root的情况下完成安卓手机数据恢复

您是否不小心从安卓设备中删除了重要数据? 担心如何取回您的照片、视频和文档? 有时您可能会不小心删除重要数据并使用安卓 root方法取回文件。 许多用户不喜欢根植他们的安卓设备,因为这是一种复杂的方法。 在本指南中,我们将向您…

[Spring Cloud] Nacos 实战 + Aws云服务器

文章目录 前言一、拥有一台Aws Linux服务器1.1、选择Ubuntu版本Linux系统1.2、创建新密钥对1.3、网络设置1.4、配置成功,启动实例1.5、回到实例区域1.6、进入具体的实例1.7、设置安全组 二、在Mac上连接Aws云服务,并安装配置JDK112.1、解决离奇的错误2.2…

ROS navigation栅格地图原点位置如何确定?

背景 利用ros进行导航时,生成一张栅格地图,包含gridMap.pgm和gridMap.yaml。现在想要将栅格地图及轨迹在其他应用上显示,需要确定地图的坐标系原点。 gridMap.yaml格式 image: gridMap.pgm  #文件名 resolution: 0.20000  #地图分辨率 …

IDEA项目初始化编码

大家好今天来说说IDEA项目初始化的必要操作 编码设置. 项目初始化之后找到编译器选择文件编码 , 设置成下面这样 : 找到项目设置 把设置调成这样 : 最后点击模块把语言级别改成8 这期就到这里 ,下期见!

酷开科技丨这么好用的酷开系统,不用真的会后悔!

掀开一幕幕精彩剧情,手机已经成为了我们身边必不可少的追剧神器。在这个信息爆炸的时代,我们渴望能够随时随地享受到精彩的影视作品,尤其是在家的休息的时候,希望电视也能同手机一样,想看啥就搜啥。酷开科技大内容战略…

安全知识普及:了解端点检测与响应 (EDR)对企业的重要性

文章目录 EDR 的含义和定义EDR 是如何运作的?收集端点数据将数据发送到 EDR 平台分析数据标记可疑活动并做出响应保留数据以供日后使用 为什么 EDR 对企业至关重要大多数企业都有可能遭受各种网络攻击。有些攻击可以完全绕开企业的防御远程办公让员工缺乏足够的保护…

实战 - 在Linux上部署各类软件

前言 为什么学习各类软件在Linux上的部署 在前面,我们学习了许多的Linux命令和高级技巧,这些知识点比较零散,同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用,但是并没有一些具体的实操能够串联起来这些知…

快速傅立叶卷积(FFC)

论文 LaMa: Resolution-robust Large Mask Inpainting with Fourier Convolutions https://github.com/advimman/lama 1.Introduce 解决图像绘制问题——缺失部分的真实填充——既需要“理解”自然图像的大尺度结构,又需要进行图像合成。 通常的做法是在一个大型自…