验证码安全问题学习总结
前言
这几天学习了验证码安全的相关内容,在这里做一个总结,把一些的知识点巩固一下,水平有限,大神勿喷。可以参考这篇文章,总结了大部分验证码安全实例,地址 https://blog.csdn.net/Dome_/article/details/90738377
验证码作用
一,防止恶意破解密码、刷票、论坛灌水、刷页。
二,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试。
三,防止爬虫(访问频率或者频次超限后需要输入验证码)。
四,避免垃圾邮件、短信轰炸。
五,防止DDOS攻击。
验证码安全问题
一、客户端问题
1、验证码由客户端JS生成,并且在客户端JS验证,这种的比较少,不常见,因为我们都知道,在客户端的安全验证,是相当的不安全。
2、验证码输出在客户端,如cookie中,有些网页登陆为了友好,刚开始时不需要验证码,但是输入错误三回及以上时就会要求验证码,实现原理是在cookie中记录失败次数,如在cookie中写入一个标记,比如loginErr = 1,后续错误累加。如果攻击者不携带cookie提交HTTP请求呢?或者修改loginErr的值让它一直等于1呢?这样是不是一直不用输入验证码了。
二、服务端问题
1、验证码库有限,这样容易被暴力破解。
2、验证码不过期,没有及时销毁会话,导致验证码复用。
3、验证码没有进行非空判断,如果删除请求包中的验证码字段,那验证码就形同虚设。
4、验证码不刷新,这样是可以爆破的。
5、提醒过于明确
有些程序,用户输入错误,就提醒用户,用户正确,密码输入错误就提醒密码输入错误,这样容易造成用户枚举或密码枚举。
修复建议
1、 验证码只能用一次,用完立即过期!不能再次使用
2、 验证码不要太弱。扭曲、变形、干扰线条、干扰背景色、变换字体、增加token,且一次性有效。
3、 模糊提醒
4、 限制请求频率,错误一定次数,锁定账号一段时间