JeeSite3.0框架Shiro序列化漏洞修复解决方法

一、JeeSite3.0框架Shiro序列化漏洞修复解决方法

1、版本升级
https://mvnrepository.com maven仓库
打开maven仓库,找到Apache Shiro 找到一个不报红的版本。
JeeSite3.0框架Shiro序列化漏洞修复解决方法_第1张图片

打开jeesite项目,在pom.xml中修改shiro.version的版本。
JeeSite3.0框架Shiro序列化漏洞修复解决方法_第2张图片

2、配置动态密钥
到项目的 common/security/shior 目录下面新建一个类,类名可以随意。
JeeSite3.0框架Shiro序列化漏洞修复解决方法_第3张图片

按照源码的方式新写一个秘钥生成器。shiro有自己的随机生成秘钥的方法。(网上有很多案例,可以字节去看源码,也可以从网上找)

// An highlighted block
package com.thinkgem.csdp.common.security.shiro;


import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;

/**
 * @BelongsProject: cdsp
 * @BelongsPackage: com.thinkgem.csdp.common.security.shiro
 * @Author: gaojh
 * @CreateTime: 2023-02-16  14:46
 * @Description: TODO
 * @Version: 1.0
 */
public class GenerateCipherKey {

    /**
     * 随机生成密匙
     */
    public static byte[] getcipherKey(){
        KeyGenerator kg;
        try{
            kg = KeyGenerator.getInstance("AES");
        }catch (NoSuchAlgorithmException e) {
            String msg = "Unable to acquire AES algorithm. This is required to function.";
            throw new IllegalStateException(msg, e);
        }
        kg.init(128);
        SecretKey sk = kg.generateKey();
        byte[] cipherkey = sk.getEncoded();
        return cipherkey;
    }
}

找到项目shiro配置文件
JeeSite3.0框架Shiro序列化漏洞修复解决方法_第4张图片

新增自定义rememberMeManager 配置 并引用GenerateCipherKey的generateNewKey方法

<bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">
   <property name="cipherKey" value="#{T( com.thinkgem.csdp.common.security.shiro.GenerateCipherKey).getcipherKey()}"/>
bean>

修改shiro的安全配置
JeeSite3.0框架Shiro序列化漏洞修复解决方法_第5张图片


<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
   <property name="realm" ref="systemAuthorizingRealm" />
   <property name="sessionManager" ref="sessionManager" />
   <property name="cacheManager" ref="shiroCacheManager" />
   <property name="rememberMeManager" ref="rememberMeManager" />
bean>

你可能感兴趣的:(Shiro,反序列化漏洞,java)