短信平台一般是指用于企业内部统一提供短信服务的系统,一般包含发送短信、校验短信验证码等功能。虽然短信平台看似功能简单,但由于目前短信功能使用非常普遍,业务场景丰富,因此它的安全性至关重要。由于工作需要,我最近整理了一份短信平台的安全需求,在此记录分享。
(一)、请求获取验证码功能接口
功能使用场景:一般由前置应用系统(渠道端)携带用户IP+用户手机号到短信平台接口获取验证码。
面临安全风险
功能安全需求设计
短信轰炸
1、限制单IP+单手机号单位时间内请求接口次数,超过限制封禁IP。
短信验证码可猜解
2、短信验证码内容不能为不安全的随机数(不要使用可预测的标识符和确认码组合)且符合强度要求(6位及以上)。
未授权手机号获取验证码
3、支持手机号黑白名单控制策略。
短信轰炸
4、短信获取接口支持防重放(在cookie中添加时间戳等方式)。
未授权应用获取验证码
5、短信获取接口支持认证校验。
短信验证码校验绕过
6、短信验证码内容不能直接通过接口返回前置应用,而是返回发送状态即可。
短信验证码内容篡改
7、短信验证码内容不能由前置应用系统传入,而是由短信平台后端定制模板与前置应用系统绑定。
绕过单手机号发送次数限制
8、对前置应用系统传入的手机号进行字符处理及格式校验,过滤非数字字符,并确保格式正确。
短信轰炸
9、单手机号请求短信验证码间隔限制(如60s),间隔内不允许再次请求验证码。
横向短信轰炸
10、针对不同前置应用系统设置单位时间内不同的请求次数阈值。(如高频率应用阈值高一些、低频率应用阈值低一些)
(二)****、请求校验验证码功能接口
功能使用场景:一般由前置应用系统(渠道端)携带用户IP+用户手机号+用户输入验证码到短信平台接口校验验证码。
面临安全风险
功能安全需求设计
短信验证码爆破
1、限制单IP+单手机号单位时间内验证码校验错误次数。
短信验证码爆破
2、短信验证码生效时间限制。
短信验证码复用
3、相同短信验证码不能用于不同动作(即用户每步操作使用单独验证码来确认,如注册、登录、转账等用不同的短信验证码)。
短信验证码爆破
4、短信校验接口支持防重放(在cookie中添加时间戳等方式)。
短信验证码未授权校验
5、短信校验接口支持认证校验。
短信验证码复用
6、短信验证码在验证通过后应立即重置、失效。
以上安全需求并不完善,待后续探讨补充。需求中相关阈值仅供参考,具体数值要结合业务实际情况决定。另外在实际场景中,可以在前置应用系统中通过添加图片验证码等方式,防止使用自动化工具批量请求接口。