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

平台奖励创作,可能会升级VIP文章,可以移步我的公众号:【编程朝花夕拾】,且可获取首发内容。

01 引言

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

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

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

02 Kaptcha

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

2.1 依赖引入

<dependency>
    <groupId>com.github.penggle</groupId>
    <artifactId>kaptcha</artifactId>
    <version>2.3.2</version>
</dependency>

2.2 配置验证码工具类

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中的keyKAPTCHA_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 测试

默认图形验证码

定制图形验证码

// 验证码只能是数字
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个杯子里装着透明液体,让用户找出是水的图片,不知道是真是假,一直被广大网友调侃。

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

下期见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智_永无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值