扫码关注官方订阅号
有个短信接口给用户注册时发送验证码的,然后现在发现有人每次用不同ip 不同号码进行恶意调用,现在接口被调爆,如何解决这个问题呢。补充一下:目前APP已经发布出去了,能不能再服务器做相关的限制呢,因为在接口做限制,它不停的调的话,还是导致了该接口出现卡的现象
认证高级PHP讲师
最常用的方式有几种1.可以增加图文验证码2.可以针对手机号做过滤3.ip限制,单点时间范围可请求时长
大家的答案大部分都有一定作用,可以提升被攻击的难度,可以过滤掉一些低端的攻击。但是实质上在专业的hacker面前都是徒劳。
本质上就是客户端一个请求发给服务器,请求的所有参数都是来自客户端,所有在客户端做防护的措施都是浮云。有1000种方式防,就有1001种方式破。有这个功夫,不如先在服务端检查一下HTTP请求的合法性,举个例子,一个由Firefox浏览器对你APP服务器发起的短信请求User-Agent: Firefox,你要给它发吗?一个请求的Refer是www.duanxingongzhaji.com,你应不应该拦截呢?
User-Agent: Firefox
Refer
www.duanxingongzhaji.com
最经济有效的其实是加验证码,因为攻击者即使是对接打码平台,也是有固定经济成本的。有大把的裸接口跑在外面,短信轰炸机这种工具是不会盯上你的,除非是有人故意要搞你。但加验证码随之而来的就是用户体验的下降。
加验证码
APP已经发版了,没办法加怎么办? 凉拌呗! 要么强升要么就继续忍受攻击吧。
APP已经发版了,没办法加怎么办? 凉拌呗! 要么强升要么就继续忍受攻击吧
回答对IP和手机号做次数限制的亲们,你们认真审题了吗???
每次用不同ip 不同号码 不同ip 不同号码 不同ip 不同号码
IP可以考虑对代理和机房IP的识别,自己识别成本太高,可以对接第三方的saas服务,但也没有谁能100%识别代理,70%~80%是差不多的。另外有一些攻击行为是众包的,由中了木马的肉鸡发起,机器本身是在正常不过的个人PC,这种方式基本不要想怎么防了。
手机号只能考虑空号检测了,这个也不要试图自己做了,找供应商吧,同样的,没有100%的准确率,并且不是实时的。技术上讲可以有一些帮助,但是产品层面可能不太优雅。
从攻击者攻击方式考虑:
对于短信轰炸机这种无攻击目的性的情况来说,一般手机号都是存在的,并且IP都是分散的正常IP,除了验证码,真的没什么手段可以防。除非你能事先知道这个号码正在被攻击
除非你能事先知道这个号码正在被攻击
对于恶意的黑客攻击行为,一般会伴随大量空号和代理IP,一定要防的话,需要一定成本,否则只能认栽。
题目限制比较死,以上,交卷~
ip与手机绑定的形式不好,正常的用户可能会无法使用1、限制手机号发送验证码的次数2、验证码3、token
以下思路仅供参考:
APP发版出去了,别人却能够用脚本来跑接口,第一感觉这是安全性没做好,线上的接口一定要开启https访问。这样别人来抓包的难度也会大很多。
我个人感觉,发送短信的接口可以不暴露给前端,也就是说无法通过直接调用某个接口来发送短信,可以作为一个后端服务,仅暴露给API来访问。发送短信的逻辑可以写在注册,登陆等的逻辑里面。
对参数进行一次校验,比如可以将请求参数以某种规则组合成某个唯一的值,服务端拿到参数后以相同的规则组合出来看下是不是和校验值一样,如果一样则继续进行操作,如果不一样报错给客户端,这样别人在调用你的接口的时候还需要破解你的这个校验规则,这个规则越难破解,别人通过接口调用也就越难。
其他的限制可以参考楼上各位大神的思路。
这个情形我遇到过,我怀疑是专业的公司做的,他们的IP非常多,然后模拟普通用户让你难以预防,封杀的太死会误伤自己的客户.简单的就是请求接口前加大验证的难度.比如我就引入极验和把短信商给换为阿里大鱼(因为阿里做好了限制,比较方便),这两个大大的减少了被爆的几率.
不过,最后烦不胜烦,这种抓了一堆肉鸡来攻击你的接口是很难干过他的,我把手机接口给去了,由于面向的用户基本都是年轻人,索性直接强制绑定微信,利用微信的模板消息来推送了.
图片验证码一点用没有,低端一点可以用打码平台,高端直接识别二维码。
建议完善ip验证,抓取用户真实ip而非代理ip地址
遇到这种情况,没办法防,从开发的角度来看,无论对面怎么做,我们都可以刷api
图文验证码+参数经过加密生成sign+参数去服务端做校验
告诉你们个内幕: 很多是短信提供商给刷的, 创业公司很少有那闲功夫去搞竞争对手!
更别说有集群的服务器切换IP去刷, 那是个地下产业链
另外, 简单的图片验证码, 还是能破解的
楼主写的接口是对android和ios的app开放的吗?如果是这个就比较简单了。首先攻击方如果是手动刷的话,那就没办法了。但是攻击方这么做的效率也很低,我判定他们一定是通过程序进行攻击的。下面是针对程序攻击破解的方法:在客户端中添加一个私钥字符串,服务器端也有相同的私钥字符串。客户端向服务器端请求短信接口时,客户端将“私钥字符串+手机号码”md5加密生成一个token的字段。然后将token与手机号码发给服务器端。服务器端在接受到请求后,将存在服务器端的“私钥与手机号码“md5加密,如果相同则发送短信。这种方式攻击方,就需要破解你们的私钥,这个代价很大。
之前遇到过。前端没办法立即加验证码,而那边却在呼呼的耍短信。当时的解决办法是:服务器关掉端关掉对短信验证码的请求。对向服务器请求短信验证码的接口,服务器直接把返回的errorCode设置为异常代码,可以被前端捕获,然后把验证码写到错误信息中,弹出来。这样用户还是可以看到验证码的。
errorCode
然后再坐下来加图片验证等等
PHP学习
技术支持
返回顶部
最常用的方式有几种
1.可以增加图文验证码
2.可以针对手机号做过滤
3.ip限制,单点时间范围可请求时长
大家的答案大部分都有一定作用,可以提升被攻击的难度,可以过滤掉一些低端的攻击。但是实质上在专业的hacker面前都是徒劳。
本质上就是客户端一个请求发给服务器,请求的所有参数都是来自客户端,所有在客户端做防护的措施都是浮云。有1000种方式防,就有1001种方式破。有这个功夫,不如先在服务端检查一下HTTP请求的合法性,举个例子,一个由Firefox浏览器对你APP服务器发起的短信请求
User-Agent: Firefox
,你要给它发吗?一个请求的Refer
是www.duanxingongzhaji.com
,你应不应该拦截呢?最经济有效的其实是
加验证码
,因为攻击者即使是对接打码平台,也是有固定经济成本的。有大把的裸接口跑在外面,短信轰炸机这种工具是不会盯上你的,除非是有人故意要搞你。但加验证码随之而来的就是用户体验的下降。APP已经发版了,没办法加怎么办? 凉拌呗! 要么强升要么就继续忍受攻击吧
。回答对IP和手机号做次数限制的亲们,你们认真审题了吗???
IP可以考虑对代理和机房IP的识别,自己识别成本太高,可以对接第三方的saas服务,但也没有谁能100%识别代理,70%~80%是差不多的。另外有一些攻击行为是众包的,由中了木马的肉鸡发起,机器本身是在正常不过的个人PC,这种方式基本不要想怎么防了。
手机号只能考虑空号检测了,这个也不要试图自己做了,找供应商吧,同样的,没有100%的准确率,并且不是实时的。技术上讲可以有一些帮助,但是产品层面可能不太优雅。
从攻击者攻击方式考虑:
对于短信轰炸机这种无攻击目的性的情况来说,一般手机号都是存在的,并且IP都是分散的正常IP,除了验证码,真的没什么手段可以防。
除非你能事先知道这个号码正在被攻击
对于恶意的黑客攻击行为,一般会伴随大量空号和代理IP,一定要防的话,需要一定成本,否则只能认栽。
题目限制比较死,以上,交卷~
ip与手机绑定的形式不好,正常的用户可能会无法使用
1、限制手机号发送验证码的次数
2、验证码
3、token
以下思路仅供参考:
APP发版出去了,别人却能够用脚本来跑接口,第一感觉这是安全性没做好,线上的接口一定要开启https访问。这样别人来抓包的难度也会大很多。
我个人感觉,发送短信的接口可以不暴露给前端,也就是说无法通过直接调用某个接口来发送短信,可以作为一个后端服务,仅暴露给API来访问。发送短信的逻辑可以写在注册,登陆等的逻辑里面。
对参数进行一次校验,比如可以将请求参数以某种规则组合成某个唯一的值,服务端拿到参数后以相同的规则组合出来看下是不是和校验值一样,如果一样则继续进行操作,如果不一样报错给客户端,这样别人在调用你的接口的时候还需要破解你的这个校验规则,这个规则越难破解,别人通过接口调用也就越难。
其他的限制可以参考楼上各位大神的思路。
这个情形我遇到过,我怀疑是专业的公司做的,他们的IP非常多,然后模拟普通用户让你难以预防,封杀的太死会误伤自己的客户.简单的就是请求接口前加大验证的难度.比如我就引入极验和把短信商给换为阿里大鱼(因为阿里做好了限制,比较方便),这两个大大的减少了被爆的几率.
不过,最后烦不胜烦,这种抓了一堆肉鸡来攻击你的接口是很难干过他的,我把手机接口给去了,由于面向的用户基本都是年轻人,索性直接强制绑定微信,利用微信的模板消息来推送了.
图片验证码一点用没有,低端一点可以用打码平台,高端直接识别二维码。
建议完善ip验证,抓取用户真实ip而非代理ip地址
遇到这种情况,没办法防,从开发的角度来看,无论对面怎么做,我们都可以刷api
图文验证码+参数经过加密生成sign+参数去服务端做校验
告诉你们个内幕: 很多是短信提供商给刷的, 创业公司很少有那闲功夫去搞竞争对手!
更别说有集群的服务器切换IP去刷, 那是个地下产业链
另外, 简单的图片验证码, 还是能破解的
楼主写的接口是对android和ios的app开放的吗?
如果是这个就比较简单了。
首先攻击方如果是手动刷的话,那就没办法了。但是攻击方这么做的效率也很低,我判定他们一定是通过程序进行攻击的。
下面是针对程序攻击破解的方法:
在客户端中添加一个私钥字符串,服务器端也有相同的私钥字符串。
客户端向服务器端请求短信接口时,客户端将“私钥字符串+手机号码”md5加密生成一个token的字段。然后将token与手机号码发给服务器端。
服务器端在接受到请求后,将存在服务器端的“私钥与手机号码“md5加密,如果相同则发送短信。
这种方式攻击方,就需要破解你们的私钥,这个代价很大。
之前遇到过。前端没办法立即加验证码,而那边却在呼呼的耍短信。
当时的解决办法是:
服务器关掉端关掉对短信验证码的请求。
对向服务器请求短信验证码的接口,服务器直接把返回的
errorCode
设置为异常代码,可以被前端捕获,然后把验证码写到错误信息中,弹出来。这样用户还是可以看到验证码的。然后再坐下来加图片验证等等