如何防止验证码被攻击?

    如何防止验证码被攻击?验证码可以用来攻击单个用户,也就是短信轰炸,也可以刷量增加网站成本,虽然一条几分钱,但是量多了也是一种成本。以下几种验证码被攻击的解决方案。

1.发送间隔限制,每过60秒或120秒之后才可以再次发送

    这个可以在前端限制点击之后60秒内无法再次触发事件。当然了后台也需要限制,

每次发送成功后,可以在redis里存储一个字符串,key为手机号,value带有时间戳。同一个手机号再次发送时先从redis里获取字符串对比时间。

另外,这个字符串的过时时间也可用作验证码的有效时间,例如验证码5分钟之内有效,那么字符串的有效时间就可以设置为5分钟。

2.发送次数限制,每天只可以发送多少次

    可以在redis内维护一条记录,记录的过期时间为24小时,value为此号码发送短信的次数,每次发送前先获取此号码今天发送了多少次了,超过次数不发送。

3.同一个ip发送次数限制

    这个做法和方法2类似,只不过把(号码, 次数)换成了(ip,次数)。

4.增加图片(或其他形式)的验证码 

    每次初始化时随机生成一个图片验证码存在session,在最后点击发送之前需要验证输入的验证码是否正确,验证码使用一次后失效。

5.增加token

    用户提交请求时会携带token到后台,将缓存中的token和用户请求带过来的token进行比较,如果相同,会将缓存中的token进行更新。若用户重复提交,则用户之后发过来的请求的token和缓存中的token是不一致的,所以会导致之后的请求失败。

猜你喜欢

转载自blog.csdn.net/fanxing1964/article/details/81384631