为防止暴力破解密码,保护用户数据隐私,在输入密码时我们一般都会限制用户尝试密码次数,当多次输错密码后,将在一段时间内锁定账号。越是敏感隐私的数据这一步就越是不可少。像手机银行这种,一般只要输错3次将会锁定24小时,24小时后才能重新尝试。不同的业务系统需要根据颗粒程度和业务需求设置密码尝试次数和锁定时间。
首先先来确定锁定的是具体的用户还是IP地址,一般来说是将尝试登录的人的IP地址锁定,为什么呢?因为某些恶意用户会尝试登录其他用户的账号,如果将具体的用户锁定,那么可能就会误伤正常用户,如果恶意用户拿到账号把系统全部人员都锁定,那正常用户就都没法使用了。但就算锁定IP地址,有些黑客还可以通过IP代理池不停切换IP来尝试密码,所以我们会要求用户密码的复杂度并且在密码输入正确后,还需要验证图形验证码,不过本文还是来主要讲讲怎么限制用户密码错误次数。
Redis记录输错密码次数,key为用户IP地址,value为密码错误次数,并且要设置过期时间TTL,过期时间即为锁定时间,当到达阈值后只有Key过期了,才能继续尝试登录。以下密码错误阈值我设置的5次,过期时间为10分钟。
命令:EVAL script numkeys key1...
作用:执行script中的脚本,numKeys为传递键个数,后面跟传递的键
EVAL "
local key = KEYS[1]
if redis.call('GET',key) == '5'
then return redis.call('TTL',key);
else
redis.call('INCR',key)
redis.call('EXPIRE',key,600)
return 0;
end" 1 127.0.0.1
使用数据库的实现比较简单,实现具体用户的锁定。
在数据库用户表中添加两个字段:
🌟 num: 用户密码错误次数
🌟 unlock_time: 解开锁定的时间
这些功能都旨在通过限制一定时间内的操作次数或频率,来保障系统的安全、稳定和公平性。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。