关于JeeSite框架Shiro序列化漏洞修复解决方法
一、升级shiro的版本
将这里改为百度上所说的那个有漏洞的版本以上的随便版本:1.2.4以上版本
这里刚开始以为修改版本就可以解决这个漏洞,然而并没有。所以产生了第二步。
二、配置动态密匙
1、找到项目shiro配置文件
2、按照源码的方式新写一个秘钥生成器
(1) 到项目种shiro目录下面新建一个类(如下图)
(2) 详细代码
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;
}
}
3、修改shiro安全管理配置
(1)新增 property 内容rememberMeManager
<!-- 定义Shiro安全管理配置 -->
<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>
(2)新增自定义rememberMeManager 配置 并引用GenerateCipherKey的generateNewKey方法
<bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">
<property name="cipherKey" value="#{T( com.thinkgem.jeesite.common.security.shiro.GenerateCipherKey).getcipherKey()}"/>
</bean>
参考博客:https://blog.csdn.net/qq_34775355/article/details/106643678