当前位置:   article > 正文

若依低版本漏洞:shiro反序列化解决方式_若依shiro反序列化

若依shiro反序列化

若依低版本中shiro可能会有反序列化的问题,因为是固定密钥的方式导致的。

解决方式如下:

1、升级shiro至最新版本
2、保持shiro版本不变<=1.2.4,修改rememberMe默认密钥,改为动态密钥获取
3、禁用rememberMe功能

详细说一下第二种方式的具体更改内容:

找到核心代码

路径:src/main/java/com/ruoyi/framework/config/ShiroConfig.java

可以发现里面用的是固定密钥

修改为:

代码:

public CookieRememberMeManager rememberMeManager()
{
    CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
    cookieRememberMeManager.setCookie(rememberMeCookie());
    if (StringUtils.isNotEmpty(cipherKey))
    {
        cookieRememberMeManager.setCipherKey(Base64.decode(cipherKey));
    }
    else
    {
        cookieRememberMeManager.setCipherKey(CipherUtils.generateNewKey(128, "AES").getEncoded());
    }
    return cookieRememberMeManager;
}

注意:

1、cipherKey引用,加在开头。

/**
 * 设置cipherKey密钥
 */
@Value("${shiro.cookie.cipherKey}")
private String cipherKey;

2、CipherUtils方法代码,放在了src/main/java/com/ruoyi/common/utils/security/CipherUtils.java路径

代码:

package com.ruoyi.common.utils.security;

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

/**
 * 对称密钥密码算法工具类
 *
 * @author ruoyi
 */
public class CipherUtils
{
    /**
     * 生成随机秘钥
     *
     * @param keyBitSize 字节大小
     * @param algorithmName 算法名称
     * @return 创建密匙
     */
    public static Key generateNewKey(int keyBitSize, String algorithmName)
    {
        KeyGenerator kg;
        try
        {
            kg = KeyGenerator.getInstance(algorithmName);
        }
        catch (NoSuchAlgorithmException e)
        {
            String msg = "Unable to acquire " + algorithmName + " algorithm.  This is required to function.";
            throw new IllegalStateException(msg, e);
        }
        kg.init(keyBitSize);
        return kg.generateKey();
    }
}

eg:启动报错查看application.yml文件是否有

结语:这样就可以很便捷的解决shiro反序列化的问题。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/541601
推荐阅读
相关标签
  

闽ICP备14008679号