短信验证码和安全那点事
字数 1149 2025-08-18 11:37:23

短信验证码安全漏洞分析与防护指南

一、短信轰炸漏洞

漏洞描述

短信发送接口平台未设置上限或时间间隔,攻击者利用发送短信的接口,短时间内发送大量垃圾短信给指定手机号码。

攻击方式

  • 使用抓包软件重放请求
  • 对未做后端限制的网站进行短信轰炸

防护措施

  1. 设置发送间隔:单一用户发送请求后,与下次发送请求时间需要间隔60秒
  2. 设置单用户发送上限
    • 每个用户单位时间内设置短信发送数上限
    • 超过阈值则不允许当天再次调用短信接口
    • 阈值应根据业务情况合理设置

二、无效验证漏洞

漏洞表现

  1. 验证码绕过

    • 获取短信验证码后,随意输入验证码
    • 直接输入两次密码即可成功更改用户密码
    • 未对短信验证码进行验证,可能导致CSRF等问题
  2. 任意用户注册

    • 第一步:利用自己的手机号接收验证码进行验证,跳转到设定密码页面
    • 第二步:抓包篡改手机号,使用任意手机号进行注册
  3. 任意手机号码绑定

    • 第一步:正常注册成功后,在个人资料中修改绑定手机号码
    • 第二步:抓包修改绑定手机号码,新手机号任意填写
    • 第三步:获取短信验证码后,输入任意验证码即可绑定任意手机号码

问题根源

业务一致性存在安全隐患,身份验证与密码修改过程分开,导致验证无效。

三、客户端验证绕过漏洞

漏洞类型

  1. 直接返回短信验证码

    • 正常注册流程中抓包
    • 查看返回包中是否包含短信验证码
  2. 返回密文短信验证码

    • 测试方法与直接返回验证码相同
  3. 本地拦截替换返回包

    • 第一步:正常业务流程中进行注册、修改密码等操作,同时抓包
    • 第二步:观察返回包中的状态码(如Y/N、true/false、Error/Success等)
    • 第三步:尝试修改状态码,观察返回结果

测试方法

可先记录正常业务流程的数据包,再进行测试比对。

四、验证码与手机号未绑定漏洞

漏洞表现

  1. A手机的验证码,B可以拿来使用
  2. A手机在一定时间间隔内接到两个验证码,都可以使用

测试步骤

  1. 使用自己手机号收取验证码
  2. 将自己的验证码和对方的手机号填上
  3. 下一步设置新密码

五、验证码爆破漏洞

漏洞描述

短信验证码一般由4位或6位数字组成,若服务端未对验证时间、次数进行限制,则存在被爆破的可能。

防护措施

  1. 限制验证码尝试次数
  2. 设置验证码有效期
  3. 增加验证码复杂度(如字母数字组合)
  4. 实施IP或设备频率限制

综合防护建议

  1. 服务器端验证:所有验证必须在服务器端完成
  2. 绑定验证码与手机号:确保验证码只能用于对应手机号
  3. 限制验证码有效期:通常设置为3-5分钟
  4. 防止重放攻击:使用一次性token或时间戳
  5. 业务一致性检查:确保验证流程与业务操作紧密关联
  6. 日志监控:记录所有验证码发送和验证操作,便于审计
  7. 异常检测:对异常高频请求进行识别和拦截

通过实施以上防护措施,可有效防范短信验证码相关的各类安全风险,保障系统安全。

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