如何防止短信验证码接口被恶意调用攻击?
前言
最近遇到一个关于防止短信验证码被刷的问题,相信很多朋友也遭遇过这个被刷短信的问题。因此,就“防止验证码短信被盗刷”作一个总结和分享。
1、短信验证码是什么?
1.短信验证码是什么:
短信验证码是通过发送验证码到手机的一种有效的验证码系统。
某些验证码接入商提供手机短信验证码服务,各网站通过接口发送请求到接入商的服务器,服务器发送随机数字或字母到手机中,由接入商的服务器统一做验证码的验证。
通俗点讲呢就是在一些网站或者 app 上给你输入的手机号发送一条带有数字或字母验证码的短信。比如你在登陆某个 app 的时候就可以通过短信验证码来登陆。
2.短信验证码的适用场景有哪些:
1、注册验证
注册验证是短信验证码最常见的应用场景。在注册的过程中,客户按照系统要求输入手机号码,系统会将动态验证码发送到给该手机号码,用户收到验证码后,将验证码数字按要求输入指定位置,完成注册验证。能够有效的防止恶意注册和重复注册。
2、信息变更
系统用户在修改密码、手机号等个人账户信息时,为了确保为账户户主本人操作,保障用户的信息和财产安全,系统会要求必须经过短信验证才能进行修改。比如银行系统,在进入个人账户页面查看个人信息时,都必须经过验证才能打开相关页面。
3、找回密码
为了账户安全,用户大多会给账户设置较为复杂的密码,也有一些系统会给密码的安全等级分级,以此督促用户设置更为复杂的密码来保障账户的安全。然而,越是复杂就越容易遗忘。虽然现在很多浏览器和手机系统都有记录密码自动登录的功能,但是这种记录都是存在时限的,一旦超过时限,仍然需要手动输入密码,对于这种情况,因为不常记忆,往往更容易遗忘。在加入手机验证码功能后,只需要向绑定的手机号码发送验证码短信,获取验证码就能成功修改密码,操作简单、快速。
4、动态登录
现在很多安全性要求比较高或盗号比较严重的网站,在登录时都会要求进行动态验证登录,即每次登录系统时,都需要从系统获取验证码短信,输入正确的验证码才能进入系统。前者如联通、移动、电信三大运营商的应用 APP。后者如各类大型游戏网站,因大型游戏网站中的角色财富甚至角色本身都能通过某些操作换取现金,是许多通过盗号窃取财富的犯罪分子的首选。
以上就是短信验证码在各大网站系统最常见的四种应用场景。除此以外,短信验证码在网络投票、问卷调查、抽奖互动等需要保障一人一票的特殊场景中,也起到了重要作用。
2、为什么要对短信验证码进行防护?
短信验证码作为 APP 和网站最基础的需求,时常会被黑客恶意利用和进行短信轰炸。具体出现的状况,请看下面的截图(图片来自互联网)
如果短信验证码接口和页面不做任何限制,黑客很容易利用一些恶意的短信轰炸软件对接口进行攻击,不停的对同一个号码或者 N 个号码重复发送验证码短信。
短信验证码被攻击,不仅会对用户造成骚扰,引起投诉,更会浪费你的短信余额,降低品牌形象。如果做好短信接口防护,一旦被攻击,将面临的是众多不必要的损失。
3、有哪些常见的防护手段?
在介绍防护手段前我们需要了解下常见的刷短信验证的行为。
1.以攻击手机号为目的刷短信验证码
这类攻击目标主要是攻击者借助 web 网站短信接口对目标手机号进行短信轰炸。攻击者会先收集互联网上多个未经防护的网站短信接口,设定要攻击的手机号码通过模拟用户,循环向后台发送短信验证码请求,达到攻击手机号的目的。对于这类攻击一般不会再同一网站平凡发送,通过一般防护手段即可达到防护目的。
2.以恶意刷取目标网站短信费用为目的的攻击
这类攻击主要目的是刷掉目标网站的短信费用,在第一种基础上攻击者会不停变换各种接口参数如手机号、IP(采用高匿代理)等去请求后台发送短信验证码,进行恶意刷短信,后台根本无力辨别用户真伪。攻击目标明确,难以防护,因其变换不同 IP、手机号,一些简单措施基本失效,产品设计人员在前期产品设计时尤其需要注意这类攻击。
下面是针对攻击者做出的一些常见的应对措施。
1.增加前端验证码
在获取短信验证码前增加图文验证码是较为常用的方法。攻击者一般是采用自动化攻击,增加图文验证码后,攻击者要对验证进行识别验证成功后才能进行模拟用户发送请求。
常见的前端验证码有以下几种:
(1) 输入类
(2) 滑动类
(3) 点击类
2.对单个手机号请求限制
对单个手机号进行单日接收次数的限制,可以防止单个手机号无限制刷短信,同时设置时间间隔可以有效,防止人工刷票。短信接收次数可以根据平台特点进行限制,一般日接受验证码次数为 10 次左右;同一号码发送时间间隔通常为 60 秒,前后端必须保持一致。
3.对单个 IP 请求限制
对单 IP 最大发送量进行限制,可以有效防止单一 IP 下多手机号被刷的问题。最大发送量限制是防止恶意攻击者同 IP 下不同手机号进行刷短信验证码行为。根据平台实际情况设计一个短信最大发送量的阀值,超过阀值将不予返回短信。
4.对手机号码真实性限制
检测输入手机号码的有效性,屏蔽无效和非法的手机号码。
5.对传出参数进行加密限制
通过对传向服务器各项参数进行加密,到了服务器再进行解密,同时用 token 作为唯一性识别验证,后台写一个算法将 token 注入到前端,然后前端可以通过相应的规则获取到 token,在发送短信验证请求接口数据时带上 token,在后端对 token 进行验证,验证通过才能正常将短信发送。
4、这些防护手段有没有用呢,到底该如何选择?
1.第一种方法最为常见,可以有效提升攻击者的攻击成本,但同时也需要考虑到用户体验。对于第一种攻击手段来讲,攻击者一般都会直接放弃这种网站,但是也难免碰到头铁的非要将你的网站拉入他的轰炸网站库中,毕竟打码平台相当便宜。如果碰到第二种攻击则相当于徒劳。
2.第二种到第五种方法可以同时结合使用,也可以结合第一种方法使用。不过大多数情况是好多人只用了第一种方法就以为能高枕无忧了,却不知道早已被人破解。加上后几种方式可以在某些方面有效提高防护有效性。
这个时候有人就说了,发个短信验证么还要搞这么多事情,烦死了。
有人问,博主除了这些还有没有更好的办法来解决这个问题呢?有没有不需要我写那么多代码就能防护好短信不被盗刷的?
答案当然是有了。
有人已经开发好了一款专门儿为防护短信验证码的短信防火墙,它能够实时有效的防护每一条短信。拦截大多数恶意攻击请求。
那么有人就说了,这个短信防火墙跟上面这些有啥不一样的,莫不是就把上面这些整一块了吧?
当然不是啦,这款短信防火墙是按照支付风控标准实施打造的一款安全防火墙。他还有以下几方面的特点。
1. 区分正常用户请求和模拟器自动攻击脚本请求。对模拟器脚本攻击实施拦截。
2. 能够区分每台设备,对设备施加防护策略。在受到攻击时只对攻击者设备进行拦截,正常用户设备则不收影响。
3. 能够区分新老用户,在受到攻击时也能够确保老用户的业务不受任何影响
说点儿实在的,就是你不管怎么着防吧,就是不需要你来考虑了,不需要想那么多,也不需要写那么多代码,开心就完了。
下面是我自己测试的一个效果图:
想试用的可以私信联系我哟~
5、结语
这篇文章到这里就结束了,感谢大佬们驻足观看,大佬们点个关注、点个赞呗~
谢谢大佬~
作者:香芋味的猫丶
版权声明: 本文为 InfoQ 作者【香芋味的猫丶】的原创文章。
原文链接:【http://xie.infoq.cn/article/c58ecd65f8a8a08f681c3fb1e】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论