短信验证码安全验收标准
作为用户,我可以通过手机号和短信验证码登录,以便于更方便的登录。
安全验收标准:
- 短信验证码有效期 2 分钟
- 验证码为 6 位纯数字
- 每个手机号 60 秒内只能发送一次短信验证码,且这一规则的校验必须在服务器端执行
- 同一个手机号在同一时间内可以有多个有效的短信验证码
- 保存于服务器端的验证码,至多可被使用 3 次(无论和请求中的验证码是否匹配),随后立即作废,以防止暴力攻击
- 短信验证码不可直接记录到日志文件
- 如登陆场景则需判断手机号是否已注册
- (建议)发送短信验证码之前,先验证图形验证码是否正确
- (可选)集成第三方 API 做登录保护(服务器在处理登录请求的时候,尽可能多的收集该请求的上下文信息,例如登录请求的来源IP地址,时间,手机号,User-Agent等等数据,并且把这些数据传递给第三方API,由他们进行一次分析判断,并把结果返回给服务器,告诉服务器当前请求者是可信用户还是可疑用户)
- 应该可以通过配置白名单的方式,只向特定手机号码发送验证码,以免在非生产环境测试时发生打扰真实用户的事故
- 应该可以通过配置 By Pass 的方式,在特定环境禁用短信验证码发送,并总是验证通过,以便在非生产环境节约短信配额
- APP可以直接走移动供应商手机验证