大多系统在做注册、登录、找回密码、修改密码等功能时,往往需要发送短信验证码来确定当前操作者即为该账号的所属者,来保障账号的安全。
发送一条短信费用大概在0.03-0.04之间,对于正常的使用,勉强是可以接受的。
如果控制不好,会被滥用,花钱不说,对用户造成不好的体验。
如何防止短信接口被滥用、盗用?
1、前端增加时间限制,如:js控制60秒后才能继续发送(但不用等60秒,刷新后又能获取)
2、前端用cookie,把剩余限制的时间记录到cookie内,解决刷新剩余时间消失的问题(但初级程序员会通过f12,看到请求事件,直接在浏览器内访问短信接口地址)
3、采用post方式,解决浏览器内直接访问的问题(但仍能通过接口调用工具如postman进行调用)
4、通过后台记录手机号发送验证码的记录,限制发送时间间隔,解决通过工具调用(但程序员可以写脚本每隔1分钟请求一次)
5、通过限制每个手机号每天的发送次数,可以解决4的问题(但程序员同样可以写脚本把所有的手机号遍历一遍,挨个发送)
6、通过限制每个ip的发送次数来解决5的问题(但程序员同样可以写脚本,通过代理ip绕过对ip的限制)
7、前端设置图片验证码,解决6的问题(但一般简单的图片验证码同样可以软件进行识别,照样可以用脚本调接口)
8、一般到第7步,基本可以解决短信接口盗刷问题。你应该明白12306为什么设置那么复杂的验证码了吧。
想做到万无一失,仿照12306做验证,保证是人为在操作。