apache shiro 反序列化漏洞解决方案

apache shiro 反序列化漏洞解决方案

  • 反序列化漏洞解决方案
    • 产生原因
    • 解决方案1:1.升级shiro至最新版本1.7.1
    • 解决方案2:修改rememberMe默认密钥,生成随机密钥。

反序列化漏洞解决方案

反序列化漏洞介绍
序列化:把对象转换为字符串或者字节流的过程。
反序列化:把字符串或者字节流恢复为对象的过程。
反序列化漏洞的产生原理,即黑客通过构造恶意的序列化数据,从而控制应用在反序列化过程中需要调用的类方法,最终实现任意方法调用。如果在这些方法中有命令执行的方法,黑客就可以在服务器上执行任意的命令。

解决方案:
1.升级shiro至最新版本1.7.1
2.保持shiro版本不变<=1.2.4,修改rememberMe默认密钥
3.禁用rememberMe功能(不使用此方法)
在这里插入图片描述

产生原因

shiro提供了记住我(RememberMe)的功能,即可以在关闭浏览器的情况下,下次打开时还能记住你是谁,无需登录即可访问。
shiro默认使用了CookieRememberMeManager来管理RememberMe cookie, 其处理cookie的流程是:
1:生成cookie:序列化 => 使用密钥进行AES加密 => Base64编码,最后返回客户端 remebreme Cookie;
2: 识别cookie:得到rememberMe的cookie值=>Base64解码=>使用密钥进行AES解密=>反序列化。
这个通过观察shiro1.2.4版本的源代码可以发现,如果不指定密钥,shiro会默认一个初始化密钥,该密钥是被硬编码在代码中,由于代码是开源的,攻击者很容易找到该密钥,并且伪造cookie发起攻击。
总结:漏洞产生的根本原因是密钥泄露,比如使用网上公开的密钥,也会存在这个问题。

解决方案1:1.升级shiro至最新版本1.7.1

        <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.7.1</version></dependency>

密钥硬编码问题存在于1.2.4版本及以下。通过观察最新版本1.7.1的源代码发现,如果不指定密钥shiro会初始化一个随机密钥,由于密钥是随机生成的,所以攻击者没办法猜测到密钥。
注意 这是在使用shiro默认密钥的情况下,如果应用修改了默认密钥则需要保证该密钥不是公开的,并妥善保管防止泄露。
单纯升级shiro没能达到要求,还需要解决解决方案2来生成随机密钥。

解决方案2:修改rememberMe默认密钥,生成随机密钥。

springboot:随机密钥生成工具类:

import org.apache.shiro.crypto.AesCipherService;import java.security.Key;public class ShiroCustomAESKeyUtil {public static String getKey(){AesCipherService aesCipherService = new AesCipherService();Key key = aesCipherService.generateNewKey();return java.util.Base64.getEncoder().encodeToString(key.getEncoded());}
}

将默认密钥调用改为调用随机密钥:

    /*** 记住我*/public CookieRememberMeManager rememberMeManager(){CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();cookieRememberMeManager.setCookie(rememberMeCookie());
//        cookieRememberMeManager.setCipherKey(Base64.decode("fCq+/xW488hMTCD+cmJ3aQ=="));//密钥 调用ShiroCustomAESKeyUtil.getKey()生成String cipherKey= ShiroCustomAESKeyUtil.getKey();cookieRememberMeManager.setCipherKey(org.apache.shiro.codec.Base64.decode(cipherKey));return cookieRememberMeManager;}

重点将密钥修改为随机生成:
在这里插入图片描述
总结:
综合考虑建议采用升级shiro版本(方案1)+修改密钥(方案2)的方式。该方式解决默认密钥硬编码的问题,同时也防止重启后密钥改变导致重启前的remeberme cookie失效的问题。

参考链接:
https://blog.csdn.net/qq_36407469/article/details/119119875

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/285297.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unittest自动化测试框架讲解以及实战

为什么要学习unittest 按照测试阶段来划分&#xff0c;可以将测试分为单元测试、集成测试、系统测试和验收测试。单元测试是指对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作&#xff0c;通常指函数或者类&#xff0c;一般是开发完成的。 单元…

详细教程 - 从零开发 鸿蒙harmonyOS应用 第九节-——鸿蒙操作系统中的自定义视图封装:一次奇妙的旅程

一、简介 自定义视图是开发鸿蒙应用时的一个重要功能。在这篇文章中&#xff0c;我们将详细探讨如何在鸿蒙系统中实现自定义视图的封装&#xff0c;并提供一些代码示例作为你的地图。 二、自定义视图的实现 在鸿蒙操作系统中&#xff0c;我们可以通过继承ohos.agp.components.…

深入解析Guava范围类(Range)

第1章&#xff1a;范围类Range的重要性 大家好&#xff0c;我是小黑&#xff0c;今天咱们聊聊一个在Java编程世界里非常实用但又被低估的角色——Guava库中的Range类。你知道吗&#xff0c;在处理涉及到数值范围的问题时&#xff0c;Range类就像是咱们的救星。不论是判断某个数…

阿里云主导《Serverless 计算安全指南》国际标准正式立项!

日前&#xff0c;在韩国召开的国际电信联盟电信标准分局 ITU-T SG17 全会上&#xff0c;由阿里云主导的《Serverless 计算安全指南》国际标准正式立项成功。 图 1 项目信息 在现今数字化时代&#xff0c;Serverless 计算正逐渐成为云计算的一个新的发展方向&#xff0c;其灵活…

Spring Boot自动装配原理以及实践

了解自动装配两个核心 Import注解的作用 Import说Spring框架经常会看到的注解&#xff0c;它有以下几个作用: 导入Configuration类下所有的bean方法中创建的bean。导入import指定的bean&#xff0c;例如Import(AService.class)&#xff0c;就会生成AService的bean&#xff0…

【map】【单调栈 】LeetCode768: 最多能完成排序的块 II

作者推荐 【贪心算法】【中位贪心】.执行操作使频率分数最大 涉及知识点 单调栈 排序 map 区间合并 题目 给你一个整数数组 arr 。 将 arr 分割成若干 块 &#xff0c;并将这些块分别进行排序。之后再连接起来&#xff0c;使得连接的结果和按升序排序后的原数组相同。 返回…

SpringBoot已经禁掉了循环依赖!

还在问循环依赖嘛&#xff1f;SpringBoot已经禁掉了循环依赖&#xff01; 首发2023-12-18 11:26yuan人生 如果现在面试时还有人问你循环依赖&#xff0c;你就这样怼他&#xff1a;循环依赖是一种代码质量低下的表现&#xff0c;springboot2.6之后的版本已经默认禁用了。 Spr…

Postman使用总结--参数化

将 测试数据&#xff0c;组织到 数据文件中&#xff0c;通过脚本的反复迭代&#xff0c;使用不同的数据&#xff0c;达到测试不同用例的目标 数据文件有两种&#xff1a; CSV &#xff08;类似于excel&#xff09; 格式简单用这个 文件小 JSON&#xff08;字典列表&#x…

输电线路定位:精确导航,确保电力传输安全

在现代社会中&#xff0c;电力作为生活的基石&#xff0c;其安全稳定运行至关重要。而输电线路作为电力传输的重要通道&#xff0c;其故障定位和修复显得尤为重要。恒峰智慧科技将为您介绍一种采用分布式行波测量技术的输电线路定位方法&#xff0c;以提高故障定位精度&#xf…

《PySpark大数据分析实战》-14.云服务模式Databricks介绍基本概念

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

Oracle VM VirtualBox使用——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

简述&#xff1a; Oracle VM VirtualBox是一款开源虚拟机软件&#xff0c;由德国Innotek公司开发&#xff0c;后被Sun Microsystems公司收购&#xff0c;并最终被甲骨文公司收购。它支持在Windows、Mac OS X、Linux、OpenBSD、Solaris、IBM OS2甚至Android等操作系统上创建虚拟…

Docker与云计算平台集成:AWS、Azure、GCP完全指南

Docker和云计算平台的结合&#xff0c;如AWS&#xff08;Amazon Web Services&#xff09;、Azure&#xff08;Microsoft Azure&#xff09;和GCP&#xff08;Google Cloud Platform&#xff09;&#xff0c;为现代应用的构建和部署提供了巨大的便利性。本文将深入研究如何与这…