现在手机已经成为了人们必不可少的东西,手机号几乎成了我们身份ID,当前在互联网各大网站、APP等注册几乎都是通过手机号验证短信来完成注册,短信验证码发送一般我们都调用的第三方接口,当然这个是收费的。一般我们在调用第三方短信发送接口时,如果防御没做好,很有可能就成为了黑客攻击的点,可能会在几分钟内就能把你几条短信给耗光,所以做好短信验证码防御是十分重要的,下面我们分享几个方法,本人也是结合了其它网友的方法再加上自己的实践做个完善和补充,希望能帮到需要的人。
(1)单个手机号发送次数限制
比喻每个手机号一天最多只允许收到5条等,这个一般不需要自己在程序里设置,因为一般短信接口商那边可以设置,只需跟客服说一下就可以实现。当然一般黑客攻击其实是用了成千上万个手机号的,重复一个手机号去攻击很少。
(2)发送时间间隔限制
比喻设置60秒或120秒后可再发送,这里注意一点,这个限制要做两面,不仅前端html上对按钮进行失效设置,同时后端也需要验证这个时间限制间隔,只做前端只能防小白。
(3)增加其它字段的验证
在发送手机验证码前,先让用户把如用户名、邮箱、密码等字段填写完整并验证可行性,再允许用户发送手机验证码。
(4)增加图形验证码
图形验证码需要保存在Session里面,并且使用完了一个图形验证码后需立即让这个图形验证码失效,防止黑客一直用一个图形验证码通过。
(5)同一个IP限制发送次数
这里需要开发者先能获取到客户端的真实IP地址,在我的博客上一篇文章《JS和C#.NET获取客户端IP》中有说到如需获取客户端IP的方法。这个限制只能产生一定的限制,作用有限,因为黑客往往都是切换IP的
(6)判断用户发送验证码的页面入口是否是你的注册页面
这一点很重要,黑客在攻击的时候都是直接调用你发送验证的那个中间页面,可能直接跳过了你的注册页面入口,他会按照你的方法拼好要传输的参数字段直接去调用方法,这个时候我只要在后台判断一下用户进来的入口是否是注册页面的地址就行。迫使黑客通过注册页面入口进行入侵,但是这显然加大了攻击的成本。
(7)记录下验证码发送的日志,根据日志分析制定防范方法
如果上面6点做完还是发现攻击存在,那么就需要根据记录下的验证码发送日志分析来制定相应的防范措施了,例如下面就是我截取的一段日志:
这是一段大概3分钟内攻击日志的截图,大家可以看一下手机栏和IP栏,基本IP是一直在换,所以很难去限制,但是仔细分析手机号,发现手机号前6位甚至是前7位重复的概率很高,那么这时候就要对手机号段(前6或前7)来制定防范方案了,根据这些,我这里是做的两点供参考:
a.同一个手机号码段(手机号前6位)120秒内最多发送一次
b.同一个号码段(手机号前6位)当天最多发送10条
c.同一个号码段(手机号前6位)当天发送3次以上且还没有注册的话,不再发送。****
一般情况下,我们只需要做到以上几点基本上可以有效防止短信验证码的攻击。
综上,所谓“道高一尺魔高一丈”,我们很难完全限制住黑客的入侵攻击,我们只能想办法去增加黑客的攻击成本,迫使他们放弃攻击。