Java审计— 正则遗漏

Java默认正则不匹配 可能导致安全问题,如SpringSecurityCVE-2022-22978和ShiroCVE-2022-32532。示例展示了Pattern.DOTALL如何修复此问题。SpringSecurity和Shiro是两个广泛使用的安全框架,提供身份验证和授权功能。了解并正确使用Pattern.DOTALL能提高代码安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0x00 前言

在Java中如果在正则中,没有做标示,那么默认正则情况下,. 是不会去主动匹配\r \n的,因为这个特性,所以导致了一些漏洞的出现,如:

  • Spring Security CVE-2022-22978
  • Shiro CVE-2022-32532

0x01 示例

在如下的代码中,匹配了两个不同的字符串
在这里插入图片描述

    public static void main(String[] args) {
        String regex = "a.*b";
        Pattern pattern = Pattern.compile(regex);
        boolean A = pattern.matcher("ab").matches();
        System.out.println(A);
        boolean B = pattern.matcher("a\nb").matches();
        System.out.println(B);
    }

默认情况运行如下图所示:

在这里插入图片描述
那么在一定情况下可以通过这个特性进行绕过。但是通常情况下利用起来的会比较困难,为比较鸡肋。

通常的修复方式是加Pattern.DOTALL

    public static void main(String[] args) {
        String regex = "a.*b";
        Pattern pattern = Pattern.compile(regex,Pattern.DOTALL);
        boolean A = pattern.matcher("ab").matches();
        System.out.println(A);
        boolean B = pattern.matcher("a\nb").matches();
        System.out.println(B);
    }

在这里插入图片描述
在这里插入图片描述

补充知识

Spring Security

Spring Security 是一个基于 Spring 框架的安全框架,用于实现身份认证和授权功能。它提供了一组安全性服务,如透明地保护应用程序和服务、处理身份验证和授权、处理 HTTP 安全、提供与其他安全服务的集成等。Spring Security 可以轻松地集成到现有的 Spring 应用程序中,为 Web 应用程序和 RESTful Web 服务提供强大的安全性。

Spring Security 的设计和实现遵循许多基本安全概念,如身份验证、授权、会话管理、密码学、HTTPS、防范 CSRF 和 XSS 攻击等。其核心功能包括基于 URL 或方法级别的访问控制、角色和权限管理、支持多种身份验证机制(如表单登录、HTTP Basic 和 Digest 认证、OpenID 和 OAuth 2.0 等)、支持 LDAP 和 Active Directory 集成、支持单点登录和集群环境等。

Spring Security 的优点包括灵活性、可扩展性、易于使用和集成、广泛的社区支持和文档、更好的安全性等。同时,Spring Security 还有一些缺点,比如复杂的配置、学习成本较高、一些默认配置可能不太安全等。因此,在使用 Spring Security 时,需要了解其特点和注意事项,合理配置和使用。

Spring Security优势

Spring Security 提供了在 Web 应用程序中实现身份验证和授权的全面框架。以下是 Spring Security 的几个优势:

  1. 安全性:Spring Security 是一个开源的安全框架,经过广泛测试和使用,深受开发人员的信赖和保证。

  2. 可定制性:Spring Security 可以根据开发人员的需要进行定制化,例如多认证机制、授权策略、安全日志等。

  3. 灵活性:Spring Security 提供了灵活的配置选项,可以在不改变应用程序代码的情况下进行配置和修改。

  4. 易于集成:Spring Security 可以与 Spring 框架和其他第三方框架无缝集成,使得开发人员可以轻松实现安全性。

  5. 简单易用:Spring Security 提供了易于理解的 API 和开发人员友好的文档,使得开发人员可以快速上手并迅速构建安全的应用程序。

shiro

Shiro(安全性质量)是一个用于身份验证,授权和加密的Java安全框架。它提供了一个易于使用的API,使应用程序能够实现安全性功能,例如会话管理,单点登录(SSO)和密码哈希。Shiro的设计目标是简单和易于使用,并提供一些可选的插件来与其他框架和技术进行集成。Shiro的灵活性和可扩展性使其成为许多Java应用程序的首选安全解决方案之一。

shiro优势

Shiro是一个Java安全框架,具有以下优势:

  1. 集成方便:Shiro可以很容易地集成到现有的应用程序中,使用简单。

  2. 全面的认证、授权机制:Shiro支持多种认证和授权机制,包括基于表单的认证、CAS单点登录、OAuth、LDAP等,可以满足各种应用场景的需求。

  3. 高度可定制:Shiro支持自定义Realm、Session、Cache等,可以根据具体需求进行定制。

  4. 支持多种协议:Shiro支持多种Web协议,包括Servlet、Websocket、JavaFX等,可以实现多种应用场景的需求。

  5. 安全性高:Shiro提供了安全性高的加密算法和身份认证机制,可以保障应用程序数据的安全。

  6. 活跃的社区支持:Shiro有一个活跃的社区,提供了大量的文档和示例代码,方便用户学习和使用。

Pattern.DOTALL

Pattern.DOTALL是一个正则表达式标志,可以在Python中使用re模块启用。它可以在匹配模式中忽略行尾符(\n)。在使用DOTALL标志时,点号(.)特殊字符将匹配任何字符,包括行尾符。如果没有启用该标志,则点号将不匹配行尾符。这在需要匹配多行文本时非常有用,例如当需要在整个文本中匹配某个模式时。

使用方法:

re.findall(‘pattern’, text, flags=re.DOTALL)

其中,re.DOTALL 可以用 16 代替,也就是使用十六进制数表示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王嘟嘟_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值