短信API接口在web中得到越来越多的应用,如用户注册,登录,密码重置等业务模块都会使用手机验证码进行身份验证。一般情况下,我们会采用这样的安全策略,将短信发送频率限制在正常的业务流控范围内,比如,一个手机号一天最多下发10条短信,同时限制时效,验证次数。但这样的策略,攻击者通过遍历手机号,还是阻止不了短信资源被消耗的情况。

如何防止短信api接口遍历呢?

在平时浏览网站的时候,我会稍微留意一些网站是怎么做的,并记录了一些短信API接口防遍历的技术实现方式。

第一种方式:白名单

这是最简单的一种方式,但应用场景有限,比如,在一些内部应用系统(从HR系统或其他系统同步手机号过来验证),此时,只需要验证是否为内部员工手机号,如不是,直接提示非内部员工手机号;如是,再执行短信api流控策略。

第二种方式:验证码(推荐)

用户点击获取短信验证码的时候,弹出图形验证码进行验证,同时发送图形验证码和手机号码到后台验证。

当然,这种方式用户体验极差,每次都需要手动需要图片验证码才能发送手机验证码,于是,有了进一步的优化方案,从用户体验和安全角度出发,可设计为当用户输入3次错误手机验证码后自动弹出验证码。

还有另外一种方式,采用当下比较流行的滑块验证或点选验证方式,用户体验也会有所改善。

第三种方式:接口加密(不推荐)

前端与后台协商好加密方式,比如md5(timestamp+telphone+salt),前台发起请求时,同时发送 timestamp、telephone、sign参数,后台接收这些参数,按照协商好的加密方式生成一个校验值与sign进行对比,如果错误,则不处理。另外,js代码混淆+短信api业务流控限制。

风险点:虽然做了代码混淆,但js加密算法一旦泄漏,并不是一种安全的措施,但也是一种比较容易实现的技术方案。

客户端ajax代码实现:

var timestamp = (new Date).getTime();
var sign = md5(timestamp+telephone+"qwertyuiopasdfghjkl");
ajax.post({
'url': '/sms_captcha/',
'data':{
'telephone': telephone,
'timestamp': timestamp,
'sign': sign
},
...........

以上,是三种常见的预防短信api接口遍历的技术实现方案。

我创建了一个免费的知识星球,主要用于技术问题探讨。我将这个问题发表在知识星球,得到了不少星友的热情回应,以下摘录一些星友们的看法。

@超人:限制ip有可能误伤同一局域网下的用户,最好是登陆后允许发送,限制用户的发送次数

@密因:同一手机号,60秒内不能重复发送,24小时内总共发送不超过5次;2个及以上手机号,通过识别客户端特征,出口ip,随机字符串,判定是否为同一用户,对同一用户使用限制措施。或者设定略高于平常请求数的基线,如日常1分钟100个短信请求,基线设置为150,1分钟内超过150次之外的请求丢弃。

@Antares:限制每个IP、帐号每天的请求频率和数量,对请求参数做签名校验,防止请求重放

@Adler:在获取验证码前加验证,然后黑名单屏蔽虚拟号,限制每个IP一定时间内的请求数和限制每个手机号请求的总次数。

@yd:一般都是限制ip在时间段内请求次数,限制同一手机号发送次数,加图形或滑动等验证码。

@Mr.周:设置请求上线 屏蔽虚拟号码段。

@ch4ce:我们限制了IP地址,虽然这样不是最好的解决方案。

@Loki⚡:我个人感觉,首先确保发送短信验证码的逻辑是正确的,然后可以根据业务的重要程度决定是用安全产品,还是自己开发人机识别功能。

1024:人机验证,设备号,帆布指纹, ip。

corp0ra1:如果可以的话,匹配用户名?

掉到鱼缸里的猫:限制同IP请求次数。

zxt:每个用户一天或者一个小时只允许三个验证码,同ip每天只允许三个用户获取验证码。这种模式比较常用。

这是一个免费的星球,诚邀你的加入!

如何防止短信API接口遍历的更多相关文章

  1. asp实现阿里大鱼短信API接口的方法

    阿里大鱼是阿里推出的产品,官方提供JAVA..NET.PHP等版本的SDK下载,不知为何,唯独不提供ASP版本的SDK. 不提供没关系,自己写就是了,参照官方提供的API写一个就是了. 本来以为无非是 ...

  2. PHP控制阿里云短信API接口实现短信群发功能

    阿里云短信支持先使用后支付的原则,价格为4分半1条. 通过SDK可以与网站功能的绑定,实现响应的短信发送功能 现已统一合并升级为:消息服务. 消息服务 阿里云消息服务(Message Service, ...

  3. 短信api接口

    1.需要用到的结构 typedef struct _SM_PARAM { char SCA[16];//+8613552678753// 短消息服务中心号码(SMSC地址) char TPA[16]; ...

  4. java 调用短信 api 接口发送短信

    参考:   https://blog.csdn.net/u014793522/article/details/59062014 参考 :https://blog.csdn.net/Lu_shilusi ...

  5. 短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本

    前言 承接前文<短信发送接口被恶意访问的网络攻击事件(二)肉搏战-阻止恶意请求>,文中有讲到一个定位非法IP的shell脚本,现在就来公布一下吧,并没有什么技术难度,只是当时花了些时间去写 ...

  6. php短信验证码接口接入流程及代码示例

    对于绝大部分企业来说,所使用的短信验证码接口都是第三方短信服务商所提供,目前市场上短信服务商有很多,在此向大家推荐一家动力思维乐信,运营13年,值得信赖! 就拿动力思维乐信短信验证码接口为例,详细介绍 ...

  7. ThinkPHP3.2.3框架下接入阿里云短信服务接口实现:注册登录

    首先介绍下短信注册登录流程: 注册页面点击获取手机号验证码按钮,用jquery的click事件POST或GET方法把手机号发送到后台控制器: 后台控制器创建函数,收到手机号后生成随机码,例如:6位的随 ...

  8. 短信API——短信验证码

    简介 短信服务(Short Message Service.SMS)是指通过调用短信发送API,将指定短信内容发送给指定手机用户. 阿里云短信服务 阿里云短信服务产品介绍:https://www.al ...

  9. 短信发送接口被恶意访问的网络攻击事件(四)完结篇--搭建WAF清理战场

    前言 短信发送接口被恶意访问的网络攻击事件(一)紧张的遭遇战险胜 短信发送接口被恶意访问的网络攻击事件(二)肉搏战-阻止恶意请求 短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本 ...

随机推荐

  1. 腾讯WeTest兼容服务再次升级,支持小程序兼容

    WeTest 导读 小程序作为微信内能被便捷地获取和传播的工具,吸引着越来越多的开发者加入其中.无论是小游戏.零售.出行服务还是生活餐饮等,各行各业的小程序出现在用户的手机上,在给用户带来便利的同时, ...

  2. MTSC2019大会日程重磅发布,腾讯WeTest独家Topic大揭秘!

    WeTest 导读 中国移动互联网测试开发大会 Mobile Testing Summit China(简称 MTSC)是由国内最大的移动测试技术社区 TesterHome 发起的软件测试行业技术会议 ...

  3. vue打包后刷新页面报错:Unexpected token <

    前言 今天遇到了一个很怪的问题,在vue-cli+webpack的项目中,刷新特定页面后页面会变空白,报错为index.html文件中Unexpected token <. 怪点一是开发环境没有 ...

  4. 【IPHONE开发-OBJECTC入门学习】文件的操作,读写复制文件

    转自:http://blog.csdn.net/java886o/article/details/9041547 FileTools.h FileTools.m #import "FileT ...

  5. wpf DATAgrid模板中button 命令绑定以及命令参数绑定

    场景:视频上传功能,上传列表使用DataGrid控件,视频有不同的状态对应不同的操作,DataGrid中最后一列为操作列,里面是Button控件.希望点击Button后执行对应的操作,但是设置Butt ...

  6. MES系统如何帮助烟草行业管理生产流程

    与很多其他行业一样,烟草MES系统可以帮助卷烟企业实现智能生产.精益制造.快速实现烟草企业数字化车间的创建,助力企业实现改造升级,从而提升企业生产效率,降低生产成产.烟草行业得MES者得天下. 烟草行 ...

  7. 程序员必备技能之Markdown

    Markdown介绍 Markdown是一种纯文本格式的标记语言,比HTML更简单,通过一些简单的语法标记,就可以让文本简洁好看. Markdown已经是程序员一项必备技能了,代码块.流程图.序列图. ...

  8. vue路由跳转传参的两种方法

    路由跳转: this.$router.push({ name: '工单列表', params: {p_camera_dev_name: 'xxx'} }); 使二级菜单呈点击状态: $('[index ...

  9. css实现简单音乐符效果

    css实现简单音乐符效果 利用css3中的transform.animation.keyframes实现 <!DOCTYPE html> <html lang="en&qu ...

  10. 习题6-4 使用函数输出指定范围内的Fibonacci数

    #include<stdio.h> int fib(int n); void PrintFN(int m, int n); int main(void) { int m, n, t; sc ...