短信验证码和安全那点事
字数 1149 2025-08-18 11:37:23
短信验证码安全漏洞分析与防护指南
一、短信轰炸漏洞
漏洞描述
短信发送接口平台未设置上限或时间间隔,攻击者利用发送短信的接口,短时间内发送大量垃圾短信给指定手机号码。
攻击方式
- 使用抓包软件重放请求
- 对未做后端限制的网站进行短信轰炸
防护措施
- 设置发送间隔:单一用户发送请求后,与下次发送请求时间需要间隔60秒
- 设置单用户发送上限:
- 每个用户单位时间内设置短信发送数上限
- 超过阈值则不允许当天再次调用短信接口
- 阈值应根据业务情况合理设置
二、无效验证漏洞
漏洞表现
-
验证码绕过:
- 获取短信验证码后,随意输入验证码
- 直接输入两次密码即可成功更改用户密码
- 未对短信验证码进行验证,可能导致CSRF等问题
-
任意用户注册:
- 第一步:利用自己的手机号接收验证码进行验证,跳转到设定密码页面
- 第二步:抓包篡改手机号,使用任意手机号进行注册
-
任意手机号码绑定:
- 第一步:正常注册成功后,在个人资料中修改绑定手机号码
- 第二步:抓包修改绑定手机号码,新手机号任意填写
- 第三步:获取短信验证码后,输入任意验证码即可绑定任意手机号码
问题根源
业务一致性存在安全隐患,身份验证与密码修改过程分开,导致验证无效。
三、客户端验证绕过漏洞
漏洞类型
-
直接返回短信验证码:
- 正常注册流程中抓包
- 查看返回包中是否包含短信验证码
-
返回密文短信验证码:
- 测试方法与直接返回验证码相同
-
本地拦截替换返回包:
- 第一步:正常业务流程中进行注册、修改密码等操作,同时抓包
- 第二步:观察返回包中的状态码(如Y/N、true/false、Error/Success等)
- 第三步:尝试修改状态码,观察返回结果
测试方法
可先记录正常业务流程的数据包,再进行测试比对。
四、验证码与手机号未绑定漏洞
漏洞表现
- A手机的验证码,B可以拿来使用
- A手机在一定时间间隔内接到两个验证码,都可以使用
测试步骤
- 使用自己手机号收取验证码
- 将自己的验证码和对方的手机号填上
- 下一步设置新密码
五、验证码爆破漏洞
漏洞描述
短信验证码一般由4位或6位数字组成,若服务端未对验证时间、次数进行限制,则存在被爆破的可能。
防护措施
- 限制验证码尝试次数
- 设置验证码有效期
- 增加验证码复杂度(如字母数字组合)
- 实施IP或设备频率限制
综合防护建议
- 服务器端验证:所有验证必须在服务器端完成
- 绑定验证码与手机号:确保验证码只能用于对应手机号
- 限制验证码有效期:通常设置为3-5分钟
- 防止重放攻击:使用一次性token或时间戳
- 业务一致性检查:确保验证流程与业务操作紧密关联
- 日志监控:记录所有验证码发送和验证操作,便于审计
- 异常检测:对异常高频请求进行识别和拦截
通过实施以上防护措施,可有效防范短信验证码相关的各类安全风险,保障系统安全。