短信接口安全防护策略

1. 限制同设备标识,同IP,同手机号的发送次数

增加短信接口的流控,通过请求获取用户设备标识,IP,及手机号的信息,用户这三个属性有一个相同,则认为是同一客户端。针对同一客户端,限制每个客户端单位时间内调用短信接口的次数,如一分钟调用一次。

2. 设置设备标识,IP,手机号的黑名单

单位时间内同一设备标识,IP或者手机号访问短信接口的次数大于某一阈值时,将该标识加入到黑名单列表中。对于已被拉黑的设备标识,IP或者手机号,同样提示发送成功,而后端不发出短信,以扰乱攻击者视听。由于攻击者手机号伪造时可能会碰巧与正常用户的手机号相同,所以讲手机号加入黑名单时需要特殊注意。

加入黑名单的客户端可以在一段时间间隔后自动解除黑名单。

3. 采用图形验证码验证,点触验证或滑动验证

在发送短信时,增加图形验证码验证,点触验证或滑动验证。图形验证码是常用的验证码验证方式,但是攻击者可以通过OCR技术进行破解,需要不定时的动态升级图形验证码,增加破解难度。

推荐使用点触验证或滑动验证,通过采集用户当前各种的参数行为(行为轨距,操作时间,当前环境等等)来判断是否为机器行为。在用户体验上,手机端不建议使用选字类型的验证码,对于非大屏的手机不是很友好。在安全性上,这类验证码要比其他验证码破解成本高。市面也有现成的方案,比如luosimao的人机验证和极验。

4. 检测IP所在地是否与手机号归属地匹配

IP地址和手机号码都伴随着地理位置属性。通过对GEO-IP库和手机号码归属地库的映射,从地理位置的维度判断风险,例如手机号码归属地与IP归属地不同等等,并对来自高危地区的请求做加权识别。

5. 预发送请求从后端获取令牌

在发送短信页面载入时,向后端发送请求,根据客户端相关信息生成令牌返回给前端。前端获取令牌后,在发送短信时,再次编码将令牌送回发送给后端。后端对两次的令牌进行验证,没有问题再进行短信的发送。

这需要前端对JS进行混淆,保证攻击者无法从前端获得令牌。

另外,需要限制令牌的时效性,令牌是根据时间戳生成的,只有比较短的有效时间。

6. 要求输入实名姓名,利用API进行核对

国内手机都是实名认证的,在关键短信发送时,可以让用户输入或者从其他渠道获取用户的真实姓名,通过相关API对用户的手机号真实性进行认证。

7. 通过WAF拦截无效请求

通过nginx+lua+redis构建WAF,在请求访问应用服务器之前就对无效请求根据策略进行拦截,如指定时间间隔内同IP请求次数大于某一阈值时,对后续请求进行拦截。

你可能感兴趣的:(架构,安全,短信)