我与春风皆过客,你携秋水揽星河
短信平台一般是指用于企业内部统一提供短信服务的系统,一般包含发送短信、校验短信验证码等功能。虽然短信平台看似功能简单,但由于目前短信功能使用非常普遍,业务场景丰富,因此它的安全性至关重要。由于工作需要,我最近整理了一份短信平台的安全需求,在此记录分享。
请求获取验证码功能接口
功能使用场景:一般由前置应用系统(渠道端)携带用户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、短信验证码在验证通过后应立即重置、失效。 |
以上安全需求并不完善,待后续探讨补充。需求中相关阈值仅供参考,具体数值要结合业务实际情况决定。另外在实际场景中,可以在前置应用系统中通过添加图片验证码等方式,防止使用自动化工具批量请求接口。