接收短信验证码怎么防止被攻击?
比如用程序生成随机手机号,不断模拟点击接收短信,可以把短信耗干,怎么防止呢?
完全防止是不可能的,只有尽可能减少。
1.验证码 + 时效(机器人
2.IP封锁,同一IP地址一天内最多发送N次(爬虫代理
3.手机号封锁,同一手机号间隔N秒可发送,一天内最多发送N次
4.手机号验证,最基础的一步
可以借鉴各大网站如何实现的。
最有效的确实是图片验证码。其他方式,都防不住恶意来浪费你短信的。
大部分倒计时,是针对“友好”用户,防止他手贱不停点,并不是针对恶意用户特意来浪费你短信的。特意浪费短信的,手机号都是假的。
我自己目前的解决方案是:
1、注册。
注册时填写手机号等信息,提交后才发送验证码(手机号写入数据库)并转到B页面。再字段里添加一个短信发送时间和短信发送次数。注册时短信发送次数设置为1。在B页面填写验证码,因为要防止没有收到验证码,所以需要再来个按钮获取验证码。当点击获取验证码后,发送验证码,发送次数为+1。当发送次数为3次之类的,就提示不发送,一个小时之后再来。每次发送验证码时间限制为1分钟。1小时之后再来,发送验证码,发送次数设置为1.以此类推。
2、重置密码。和注册的思路一样,输入手机号,获取验证码,验证码次数为1,再次点击(60秒限制,包括PHP后端语言也有校验),发送验证码,次数设置为2.当次数超过3时,提示1小时之后再来。
这个思路,图片验证码都不需要了。
这个问题我之前也搜过一圈,总结来看,最有效的还是图形验证码。
也可以试试一些集成好的账号系统,比如 http://www.onlyid.net 等,就没有这些烦心事了。