当前位置: 首页 > news >正文

AJ Security:实用的 Java Web 安全库

基于 Spring/HandlerInterceptor 拦截器机制,抽象一套过滤/校验的机制,形成统一的一套调用链,可灵活配置并扩展。本安全框架架构简单,代码精炼,没有其他额外的依赖,适用于任何基于 Spring 的项目。Spring Boot 程序引入 jar 包即可开箱即用。

本框架的功能有:

  • HTTP Web 安全

    • HTTP Referer 校验
    • 时间戳加密 Token 校验
    • IP 白名单/黑名单
    • 防止重复提交数据
    • 根据 IP 地域限制(TODO)
  • 一般性 Web 校验

    • 防止 XSS 跨站攻击
    • 防止 CRLF 攻击
    • Cookie 容量检查
  • HTTP 标准认证

    • HTTP Basic Auth 认证
    • HTTP Digest Auth 认证
  • 验证码 Captcha 机制

    • 简单 Java 图片验证码
    • 基于 kaptcha 的图片验证码
    • 基于 Google Recaptcha 的验证码
    • 基于 CloudFlare Turnstile 的验证码
  • API 接口功能

    • 限流限次数(TODO)
  • 其他实用功能

    • 实体字段脱敏
    • API 接口加解密

AJ Security 的代码量不多(JAR 约 100kb 大小),而且都是很简单易懂的代码。另外没啥第三方依赖,适合 Java8+。

源代码

本项目采用 Apache License 协议开源。

  • GitHub
    地址:https://github.com/lightweight-component/aj-security
  • GitCode
    地址(适合中国用户快速访问):https://gitcode.com/lightweight-component/aj-security

相关链接

用户手册 | JavaDoc | DeepWiki 页面

安装

本组件与 Spring Boot 程序无缝衔接。添加依赖后,即可在 Spring Boot 项目中使用。Maven 坐标:


<dependency><groupId>com.ajaxjs</groupId><artifactId>aj-security</artifactId><version>1.0</version>
</dependency>

在 Java 8 + SpringBoot2.7 通过测试。

当前不支持非 Spring 程序。如果要在传统 Spring MVC 程序中使用,可能要针对配置的相关机制进行修改。

演示程序

我们于源码中附带有演示程序 Sample 可供安装配置参考,同时也作为测试用例的一部分,包含了各个安全组件的演示。浏览源码aj-security-samples目录,这是一个标准的SpringBoot v2.7 工程。执行FooApp类的main()函数即可启动该演示程序。

配置

开发者与 AJ Security 打交道更多是通过配置文件进行配置的。在 Spring 配置 YAML 文件application.yml中添加如下内容:

security:HttpReferer: # Referer 拦截globalCheck: false # 全局检查enabled: trueallowedReferrers:- https://example.com- https://another-example.com- https://my-site.comTimeSignature: # 时间戳控制enabled: truesecretKey: der3@x7Az#2 # 密钥,必填的IpList: # ip 白名单/黑名单globalCheck: false # 全局检查enabled: truewhiteList:- 192.168.1.1- 192.168.1.2HttpBasicAuth: # HTTP Basic 认证globalCheck: true # 全局检查enabled: falseusername: adminpassword: adminHttpDigestAuth: # HTTP Digest 认证globalCheck: true # 全局检查enabled: falseusername: adminpassword: admin2EncryptedBody:publicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmkKluNutOWGmAK2U80hM9JtzsgLAlgvHqncakqwhruE9TIXUQFDRKsIBQwN+3rLC76kyOl4U+eBefLaGQGJBZVq0qwIHBe4kfH0eJXaHyG/i9H2Iph1cyY6cn6ocPta6ZmSuOIcx4yLlpCgq5eDRigHs0AR418ZTlRItlhrY9+wIDAQABprivateKey: MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKaQqW42605YaYArZTzSEz0m3OyAsCWC8eqdxqSrCGu4T1MhdRAUNEqwgFDA37essLvqTI6XhT54F58toZAYkFlWrSrAgcF7iR8fR4ldofIb+L0fYimHVzJjpyfqhw+1rpmZK44hzHjIuWkKCrl4NGKAezQBHjXxlOVEi2WGtj37AgMBAAECgYBj9sX4o3UtG9qVVXX4votVVBGaztDocmIF0JL7GLqBC6hv19CNydJoUO1xiY+6iCW5YbB4k28gQqrKmXQxKszWFdd1NTHOKS3nti8I2QNc4T9FF34YvYh/WQlRw7dHmYUl/MCm6U6yVE7XK8GoYYOyAyclXuFR+SRw8/gHsoAYoQJBAPQ3L+K47QSujMSzu8ZcdRingN25VS8r790A18WNxtK9l/7b3l8aTUXmeGcjLpQDnx158jQ32fTUki5aa2eGDp0CQQCumkCpTgcvx0Ys66aXKnpaexWGWDK/ui9hY7lRdd2XijK30Uo2TlQ1ujXYjodbJJUAELE3UAC+0yj8W8Edf093AkAzrHWyaGSmZ/SbLlieCTQxqkenIq72kzpmreX6BBy8vKcrowQzZVJSZwi08gnKAdYqG4J3MBYrKstfiXxOZFw1AkA6+3radrRwzHWFWTnWmQ/qHug/kO3b3M6CrMh+nz1zIslNVVMnk0BZQgVMmaFaBbqb4gerssf9rqGK1ogfKdGzAkBQzGcbSAtTlCAMNMnOXphIvFQ/GnxlPwwr23ysyt0k14SOwGNfND4rXM2rTzjz+2yF20tGdGgmXfwnvKOaCc1Nenabled: trueParamsSign:enabled: truesecretKey: der3@x7Az42

可见在security中有各个安全组件的配置。抽象来看,主要有个配置是各个组件共用的,分别是enabledglobalCheck

  • enabled是否激活该组件。若为false则不运行该组件。我们约定,只要某组件的enabledtrue,则该组件会运行,否则不运行(而且不创建相关对象,以节省资源)
  • globalCheck是否全局检查。若为true则所有请求都会检查该组件,若为false则只有匹配 URL 的请求才会检查该组件。匹配的方式通过在 Spring 控制器上的注解声明。例如:
@GetMapping("/HttpRefererCheck")
@HttpRefererCheck
int HttpRefererCheck();

各个组件的详细配置方式请参考其各个章节。

基本原理

我们提供了近十多种安全组件,几乎都是与 Spring 框架深度绑定,充分利用了 Spring 的可扩展机制与灵活的配置机制。
多数组件通过HandlerInterceptor拦截器实现,其他特殊组件采用HandlerMethodArgumentResolver、传统的Servlet FilterHttpMessageConverter均有。

应用列子:HTTP Referer 校验

HTTP Referer 校验(也称为“Referer 检查”)是一种常见的 Web 安全措施,其原理是:后端服务器在接收请求时检查请求头中的 Referer 字段,判断请求来源是否为信任的域名或页面。

基本原理

  1. 客户端(浏览器)在发起 HTTP 请求时,会在请求头里带上Referer,指明请求的来源页面地址。
  2. 服务器端在收到请求后,读取Referer,判断其是否为受信任的来源。
  3. Referer不符合要求,则拒绝请求或返回错误。

常用场景

  • 表单提交、接口调用等敏感操作的来源校验
  • 防止 CSRF 攻击
  • 防盗链(如图片、视频资源只允许本域名访问)

注意事项

  • Referer 不是所有请求都带(如直接输入网址、某些浏览器隐私模式、HTTPS 到 HTTP)
  • Referer 容易被伪造,不能作为唯一安全手段,只能作为补充
  • 建议结合 CSRF Token、Cookie 验证等多重措施

使用方式

yaml 配置

security:HttpReferer: # Referer 拦截globalCheck: false # 全局检查enabled: trueallowedReferrers:- https://example.com- https://another-example.com- https://my-site.com

拦截校验

在使用的接口上添加@HttpRefererCheck注解:

@GetMapping("/HttpRefererCheck")
@HttpRefererCheck
int HttpRefererCheck();
http://www.dtcms.com/a/282602.html

相关文章:

  • Qt获取hid设备信息
  • 抖音小程序开发如何避坑?如何接口调用与性能优化?
  • Nacos 开源 MCP Router,加速 MCP 私有化部署
  • 运维打铁: Ruby 脚本在运维自动化中的应用探索
  • leetcode 3201. 找出有效子序列的最大长度 I 中等
  • K8s 自定义调度器 Part1:通过 Scheduler Extender 实现自定义调度逻辑
  • AI Agent开发学习系列 - langchain之LCEL(1):LangChain LCEL链式编排与RAG增强实践
  • FunASR Paraformer-zh:高效中文端到端语音识别方案全解
  • Django ORM 查询工具对象详解
  • Linux 命令:uname
  • Scalefusion 与 EasyControl 对比:轻量级方案与全功能 IoT MDM 的深度碰撞
  • 前端面试题(HTML、CSS、JavaScript)
  • 在此处打开 powershell 窗口 shift + 右键 修改为 右键弹出
  • [硬件电路-28]:从简单到复杂:宇宙、芯片与虚拟世界的共通逻辑2
  • 1软件工程概念及其基本要素-思考题
  • Netty介绍和基本代码演示
  • 基于渐进式迁移学习网络(PTLN)​的小样本故障诊断模型
  • STM32CubeMX红外收发模块(串口)
  • H3CNE综合实验之五角星
  • 了解linux用户和权限
  • Linux开发利器:探秘开源,构建高效——基础开发工具指南(上)【包管理器/Vim】
  • springboot项目部署到K8S
  • Golang 并发快速上手
  • SingLoRA:单矩阵架构减半参数量,让大模型微调更稳定高效
  • ​HAProxy负载均衡集群概述
  • 逆向入门(39、40)程序逆向篇-DaNiEl-RJ.1、genocide1
  • 基于SSE传输的MCP服务器实现
  • LVS集群实践
  • 使用CodeQL挖掘Spring中的大量赋值漏洞
  • 行为模式-策略模式