验证码介绍
验证码(CAPTCHA)是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。
验证码案例
https://blog.csdn.net/wnw1234/article/details/123342540?spm=1001.2014.3001.5501
验证码挑战
尝试使用开源的tess4j框架来对验证码图片进行OCR光学识别
1.先将生成验证码图片保存到本地磁盘
2.在项目的pom文件添加tess4j依赖
3. 需要到tess4j的官方git仓库上下载各种语言的训练数据
下载地址:https://github.com/tesseract-ocr/tessdata
英文语言包:eng.traineddata
中文语言包:chi_sim.traineddata
测试案例
验证码安全升级
可以通过N条随机干扰线,添加噪点,改变图片形态都能让验证码图片变得更复杂,在不影响真人识别的前提下,有效降低破解程序的成功率.
但tess4j这样的程序对于不同语言的识别准确率,都是通过训练来提升的,这也意味不管的你的验证码变得多么复杂难看,只要有一定的规律,tess4j就可以用机器学习的方式,把它作为另一种新的语言来识别.从而提高识别成功率,实际上,验证码识别也是机器学习深度学习技术的一个非常热门的研究领域.这是个动态的攻防领域,所以验证码也需要有其他更多的技术来增加破解难度
手写表达式验证码
为了提高验证码的安全性,将原始的图片验证码改成表达式验证码就是一个很常用的手段,其实本质也就是将展现出来的图形与保存到session中的验证码文字进行区分.例如图形展示一个随机的计算式,而将计算式的结果保存到session中来进行验证
体验开源验证码
介绍一些互联网上常用的开源验证码,dai大家对验证码的技术环境有个大体的了解.
1.jcaptcha体验 http://jcaptcha.sourceforge.net
2.Happy-Captcha体验 https://gitee.com/ramostear/Happy-Captcha
3.kcaptcha体验 https://gitee.com/baomidou/kaptcha-spring-boot-starter
4.滑块式验证码 https://gitee.com/LongbowEnterprise/SliderCaptcha
5.AJ-Captcha(实现滑块和点选汉字) https://gitee.com/anji-plus/captcha?_from=gitee_search
商业验证码
商业验证码通常都是通过在前端定义更高级的人际交互操作,来达到更难被计算机程序模拟破解的目的.互联网的很多商业场景中,经常会采用一种或者多种验证码整合的方式来提高验证码安全性
1.极验验证码https://www.geetest.com
2.网易网盾https://dun.163.com/product/captcha