首页/安全/渗透测试与安全评估速查/验证码(OTP)安全设计检查
常见漏洞验证121 条

验证码(OTP)安全设计检查

短信/邮件验证码的设计核查:长度与随机性、有效期、尝试次数、场景绑定、一次性与重放防护。

验证码安全看五项

短信与邮件验证码的安全设计可以按五项规定核查:熵(长度与生成方式是否可预测)、有效期、尝试次数限制、场景与账号绑定、以及一次性(校验成功后立即作废)。除此之外还有两类运营侧问题:重发频率无限制导致短信费用被刷,以及校验接口本身缺少限流形成对验证码的爆破路径。

基本信息

检查点熵、有效期、尝试限制、场景绑定、一次性
常见实现6 位数字验证码,有效期 5-10 分钟,错误次数限制 3-5 次
适用平台登录、注册、改密、支付确认、绑定手机场景
参考标准OWASP 认证备忘单、OWASP ASVS V2

典型使用场景

  • 注册与登录链路的安全设计评审
  • 排查短信费用异常增长(刷验证码)问题
  • 改密与解绑手机等高敏操作的二次校验核查
  • 评估验证码接口的限流与防枚举能力
  • 移动端与 Web 端一致性的对照检查

核查清单

核查清单
生成:服务端生成,位数与随机性是否可预测(避免自增或时间相关)
有效期:明确时长,到期立即失效;重发是否刷新旧验证码
尝试限制:错误次数上限与超过后的处置(作废、锁定、要求重新验证)
绑定:与手机号、业务场景、请求会话绑定,串号或跨场景使用应被拒绝
一次性:校验成功后立即作废,防止同一验证码重复使用
接口限流:发送频率限制(如 60 秒一次、单日上限)与图形验证码前置

检查点与判据

检查点期望实现常见问题
长度与随机性足够空间且服务端随机生成4 位数字、序列化生成
有效期明确且较短长期有效或到期仍可用
尝试次数有上限并触发作废可无限次尝试
场景绑定与业务场景严格对应改密验证码可用于登录
一次性校验成功即作废有效期内可重复使用
发送限流按账号与来源双重限制可被用于短信轰炸
验证码校验失败返回的信息不要区分“验证码错误”与“验证码已过期”之外的其他细节,也不要在响应中暴露该手机号是否已注册,避免被用于账号枚举。
只使用自有测试账号触发验证码:用真实手机号连续触发会造成骚扰与短信费用损失,属于必须避免的动作。

易错点

  • 用真实手机号连续触发验证码,造成骚扰与费用损失
  • 忽略校验成功后验证码未作废的问题,同一验证码可在有效期内重复使用
  • 只测 Web 端,漏掉 API 与移动端入口的限流差异
  • 验证码与场景未绑定,改密场景的验证码可用于登录
  • 只看验证码位数,不检查生成方式是否可预测

数据来源与参考

  • OWASP Authentication Cheat Sheet
  • OWASP ASVS V2
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌