当前位置: 首页 > 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.lryc.cn/news/590459.html

相关文章:

  • 小白成长之路-Elasticsearch 7.0 配置
  • 创建linux端口映射连接小网
  • ASP.NET Core Hosting Bundle
  • spring容器的bean是单例还是多例的?线程安全吗?
  • 【PTA数据结构 | C语言版】构建后缀树
  • PHP 社区正在讨论变更许可证,预计 PHP 9.0 版本将完全生效
  • PyTorch深度学习框架入门案例实战
  • 代码随想录算法训练营第五十一天|图论part2
  • (新手友好)MySQL学习笔记(完):事务和锁
  • 第三章.Redis数据类型详解——string篇
  • 用 urllib 开启爬虫之门:从零掌握网页数据抓取
  • Vue3+Ts实现父子组件间传值的两种方式
  • 自动驾驶激光3D点云处理系统性阐述及Open3D库函数应用
  • 【Elsa Workflows】Elsa Workflows审批流全功能扩展
  • string类【C++】
  • 面试问题:
  • BASE64编码通俗介绍
  • Towards Low Light Enhancement with RAW Images 论文阅读
  • 北京-4年功能测试2年空窗-报培训班学测开-第五十二天
  • linux服务器stress-ng的使用
  • WAMP允许远程访问
  • 30 天自制 C++ 服务器--Day3
  • 用python实现自动化布尔盲注
  • RHCSA(软链接与硬链接)
  • 高性能架构模式——高性能缓存架构
  • sqli-labs靶场通关笔记:第23关 注释符过滤
  • 二、CV_AlexNet
  • 81、面向服务开发方法
  • 关于SaaS业务模式及其系统架构构建的详细解析
  • 横向移动(下)