CS-Notes 学习笔记
Java 后端 · 系统设计

怎样防止接口被刷?发送短信验证码的接口怎样设计?

先自己想一想,再看参考要点

参考要点

  • 刷接口的请求单独看都是正常的,只能按来源和频率识别
  • 短信验证码按多个维度限频,例如同一手机号 60 秒一次、每天 10 次,同一 IP 每小时 20 次,超过阈值要求图形或滑块验证码
  • 判断和计数要原子地完成,用 Lua 脚本在 Redis 中执行
  • 验证码存在 Redis 中 5 分钟后过期,输对立即删除,同一个验证码输错 5 次作废,并按手机号累计连续输错的次数,否则 6 位数字很快能被猜中
  • 开放给合作方的接口还要防篡改和重放:用约定的密钥对方法、路径、参数、请求体、时间戳和随机数计算 HMAC 签名,服务端检查时间戳、重新计算签名、记录随机数是否用过
在学习站中自测这道题

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。