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