背景
前段时间,公司的短信接口被人恶意调用,给公司的业务和成本都带来了一定的影响。为了尽快止损,想出了以下几种方案来完善发短信模块,防止短信被刷。
防御方法
-
调用短信接口需
token
校验
通过时间戳生成token
,保证token
5分钟之内有效。在表单页面通过后端接口提前生成好token
,用户在5分钟之内无需更新token
优点: 短信接口必须携带token
才能访问,调用需要鉴权
缺点: 为了兼容用户体验,token
必须有一定的有效期,用户在短时期内无需手动刷新页面更新token
-
限制
ip
和手机号
- 每个手机号必须相隔
60s
之后才能发下一次短信(限制手机号) - 对单个
ip
在单位时间内的请求次数设置阈值,超出阈值,加入黑名单,在一段时间内暂停对该ip
提供服务;多次进入黑名单的ip
,则永久禁止该ip
的访问权限(限制ip
)
优点: 结合方法一的token
鉴权,可以大部分过滤掉恶意调用的行为
缺点: 黑客可通过肉机+随机手机号的方式绕过限制
-
图形验证码、人机校验
通过图形验证码、人机校验,在发送短信的行为端增高门槛,杜绝自动化调用。可通过方法二的限ip
,防止攻击者忽略人机校验,大量执行请求给服务器带来额外负担
优点: 杜绝自动化调用
缺点: 图形验证码被自动化破解的概率较高,人机校验需要一定的成本