事件#
接口来源
1.WEB 注册接口
2.APP 注册接口
发送大量验证码
IP 数量不断变化,大量手机号码(不在意短信是否空号)
目前解决方案#
・ 增加了安全验证码
・ 输入验证码在发送短信
安全方案#
0. 短信发送时间间隔限制:#
限制同一个手机号码重复发送的时间间隔。通常设置为 60-120 秒,前端做倒计时限制,时间未到不能点击发送短信按钮,后台也做时间间隔限制,时间未到不能发送短信。
1.IP 限定#
根据自己的业务特点,设置每个 IP,号码,每天的最大发送量,另外可校验手机号码和 IP 是否属于同一地区
2. 修改注册步骤#
注册用户,将发送短信验证码和设置用户名密码分成两个步骤,第一步一个页面用来设置用户名和密码,用户设置用户名和密码发送到后台,获取到后台返回的第一步成功回执之后,进入第二步另一个页面发送手机短信验证码。(提交的速度和 IP 提交限制)
附:将手机短信验证和用户名密码设置分成两个步骤,用户在设置成功用户名密码后,下一步才进行手机短信验证,并且需要在获取第一步成功的回执之后才可进行校验。
3. 加入 Token#
对发送者进行唯一性识别:防止修改参数伪造多个 IP 地址和手机号码进行恶意攻击,用 Token 作为唯一性识别标识,后台将 Token 注入到前端,前端可以获取到 Token,请求发送短信验证码接口时带上 Token,后台接收到 Token 进行验证,验证未通过不能发送短信。(推荐使用第这种方案)
另外把图片和手机号码进行绑定,
4. 增加图片验证码:#
发送短信验证码时,要求输入图片验证码,每个图片验证码仅能使用 1 次,使用 1 次后,不管输入的图片验证码是否正确自动失效。
如果输入错误更新图片验证码。图片验证码失效可以防止图片验证码识别软件尝试多次识别。
可以考虑复杂的图片验证码或点触验证、滑动验证、图像正反。
5. 埋点#
通过 js 收集一些网页版的设备指纹和客户端信息上报,通过 js 生成 hash 指纹区别不通设备,同时上传浏览器 ua、分辨率、平台、系统等信息,有宽泛的鉴别能力,通过此方法可以建立自己的情报库。
对用户进行人机验证,例如,前段 js 的加载,用户页面停留的时间,判断用户是否代理 IP。
有能力企业可以自己做风控系统
安全测试#
在提交数据包的时候发送到 Request,先正常发送一次,分析关注数据包,然后在手机号码后门添加逗号在继续测试,如果可以那么久继续反复添加逗号,即可达到无限制。
-
并且此方法还可能绕过系统设置的每天最大发送短信数。
-
并且经过测试,逗号、点、减号、空格等等均可能达到绕过的目的。
-
也可以通过改变或者增加手机区号来测试
在测试短信轰炸方面,可以增加一些字符来进行测试,比如说微信曾经也爆出过在注册的时候,增加分号,可以进行多号码注册等。
- 思路决定出路