白嫖!开源Java图片验证码框架加固业务安全

01 引言

在互联网应用快速发展的今天,图片验证码作为区分人类用户与自动化程序的核心安全机制,被广泛应用于登录、注册等高敏感场景。

基于Java的图片验证码功能通过动态生成包含随机字符的干扰图像,可有效防御恶意爬虫、暴力破解等自动化攻击。其实现通常结合图像处理技术与随机算法,通过扭曲变形、噪点干扰及复杂背景设计提升破解难度。然而,验证码设计需兼顾安全性与用户体验,避免过度复杂化导致用户识别困难。

本文将介绍一种最简单的开源的图形验证框架,欢迎白嫖。

02 Kaptcha

Kaptcha 是大厂Google 出品,被广大程序员喜爱。

2.1 依赖引入

xml 复制代码
<dependency>
    <groupId>com.github.penggle</groupId>
    <artifactId>kaptcha</artifactId>
    <version>2.3.2</version>
</dependency>

2.2 配置验证码工具类

java 复制代码
public class KaptchaUtil {

    private KaptchaUtil () {}

    private static final DefaultKaptcha defaultKaptcha = new DefaultKaptcha();

    static {
        Properties properties = new Properties();
        // 设置验证码的长度
        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "6");
        // 验证码图片宽度
		properties.setProperty(Constants.KAPTCHA_IMAGE_WIDTH, "120");
		// 验证码图片高度
		properties.setProperty(Constants.KAPTCHA_IMAGE_HEIGHT, "50");
        
        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);
    }

    public static DefaultKaptcha getInstance() {
        return defaultKaptcha;
    }
}

这里必须要配置Config,可以使用默认的配置,直接传入空的Properties对象即可。

2.3 图片验证码高级配置

默认的配置已经可以满足我们对验证码的要求。如果默认的验证码不满足我们的要求,我们还可以自定义配置,通过Properties来处理。

可以配置的属性:com.google.code.kaptcha.Constants

配置名 配置作用 默认值
kaptcha.border 是否有边框 yes
kaptcha.border.color 边框颜色 black
kaptcha.border.thickness 边框粗细 1
kaptcha.image.width 图片宽度 200
kaptcha.image.height 图片高度 50
kaptcha.producer.impl 图片实现类 com.google.code.kaptcha.impl.DefaultKaptcha
kaptcha.textproducer.impl 文本实现类 com.google.code.kaptcha.text.impl.DefaultTextCreator
kaptcha.textproducer.char.string 文本集合,验证码值从此集合中获取 abcde2345678gfynmnpwx
kaptcha.textproducer.char.length 验证码长度 5
kaptcha.textproducer.font.names 字体 Arial, Courier
kaptcha.textproducer.font.size 字体大小 40px
kaptcha.textproducer.font.color 字体颜色 black
kaptcha.textproducer.char.space 文字间隔 2
kaptcha.noise.impl 干扰实现类 com.google.code.kaptcha.impl.DefaultNoise
kaptcha.noise.color 干扰颜色 black
kaptcha.obscurificator.impl 图片样式 com.google.code.kaptcha.impl.WaterRipple
kaptcha.background.impl 背景实现类 com.google.code.kaptcha.impl.DefaultBackground
kaptcha.background.clear.from 背景颜色渐变,开始颜色 light grey
kaptcha.background.clear.to 背景颜色渐变,结束颜色 white
kaptcha.word.impl 文字渲染器 com.google.code.kaptcha.text.impl.DefaultWordRenderer
kaptcha.session.key 存储在session中的key KAPTCHA_SESSION_KEY
kaptcha.session.date 存储在session中的日期 KAPTCHA_SESSION_DATE
kaptcha.noise.impl 噪点实现类 com.google.code.kaptcha.impl.DefaultNoise
kaptcha.noise.color 噪点颜色 black
kaptcha.obscurificator.impl 图片样式 com.google.code.kaptcha.impl.WaterRipple
kaptcha.producer.impl 图片生成器 com.google.code.kaptcha.impl.DefaultKaptcha
kaptcha.textproducer.impl 文本生成器 com.google.code.kaptcha.text.impl.DefaultTextCreator
kaptcha.textproducer.char.string 文本集合 abcde2345678gfynmnpwx
kaptcha.textproducer.char.length 验证码长度 5
kaptcha.word.impl 文字渲染器 com.google.code.kaptcha.text.impl.DefaultWordRenderer
kaptcha.background.impl 背景实现类 com.google.code.kaptcha.impl.DefaultBackground
kaptcha.background.clear.from 背景渐变开始颜色 light grey
kaptcha.background.clear.to 背景渐变结束颜色 white
kaptcha.image.width 图片宽度 200
kaptcha.image.height 图片高度 50
kaptcha.gibberish.impl 随机字符实现类 com.google.code.kaptcha.text.impl.DefaultGibberish
kaptcha.wordrenderer.impl 文字渲染器实现类 com.google.code.kaptcha.text.impl.DefaultWordRenderer

impl结尾的属性,用户可以自动实现,订制属于自己的实现。其他的数据可以直接修改数据不需要额外的代码。

2.4 测试

默认图形验证码

定制图形验证码

java 复制代码
// 验证码只能是数字
properties.setProperty("kaptcha.textproducer.char.string", "0123456789");
// 设置渐变色 从gray(灰色)到 yellow(黄色)
properties.setProperty("kaptcha.background.clear.from", "gray");
properties.setProperty("kaptcha.background.clear.to", "yellow");

03 小结

图片验证码最早期的验证策略。还依稀记得当年手搓图片验证码,现在已经完全忘记了。

随着技术的发展,这类图片验证码已经慢慢被滑动验证码、旋转验证码等替代,因为他们验证起来更方便且安全。

还记得当前铁道部12306的验证码曾经引起一时轰动,铁道部为了应对黄牛党刷票,更是频繁的更换验证码的形式。当年的验证码6个杯子里装着透明液体,让用户找出是水的图片,不知道是真是假,一直被广大网友调侃。

下一期给大家带来另一款开源验证码:行为验证码。可以滑动、旋转、文字点选、刮刮乐等有趣的行为操作。

下期见!

相关推荐
Chandler247 分钟前
Go语言 GORM框架 使用指南
开发语言·后端·golang·orm
.又是新的一天.16 分钟前
使用IDEA创建Maven版本的web项目以及lombok的使用
java·maven·intellij-idea
zimoyin17 分钟前
Java 快速转 C# 教程
java·开发语言·c#
Haooog21 分钟前
Java 面向对象详解和JVM底层内存分析
java·jvm
CopyLower32 分钟前
Java在微服务架构中的最佳实践:从设计到部署
java·微服务·架构
oneDay++35 分钟前
# IntelliJ IDEA企业版安装与配置全指南:避坑详解
java·开发语言·经验分享·学习·学习方法
supingemail1 小时前
面试之 Java 新特性 一览表
java·面试·职场和发展
星星点点洲1 小时前
【Java】应对高并发的思路
java
LDM>W<1 小时前
黑马点评-用户登录
java·redis
保利九里1 小时前
数据类型转换
java·开发语言