shiro反序列化漏洞修复(使用随机密钥)

说明:shiro低版本使用固定默认密钥,有被攻击的风险,可以升级shiro版本,Apache官方已在1.2.5及以上版本中修复此漏洞,但是此方式有依赖冲突的风险。这里说说不升级版本的解决方案,这方案和官方的方案一样,都是使用生成的随机密钥

1、创建随机生成密钥工具

public class GenerateCipherKey {

    /**
     * 随机生成秘钥,参考org.apache.shiro.crypto.AbstractSymmetricCipherService#generateNewKey(int)
     * @return
     */
    public static byte[] generateNewKey() {
        KeyGenerator kg;
        try {
            kg = KeyGenerator.getInstance("AES");
        } catch (NoSuchAlgorithmException var5) {
            String msg = "Unable to acquire AES algorithm.  This is required to function.";
            throw new IllegalStateException(msg, var5);
        }
        kg.init(128);
        SecretKey key = kg.generateKey();
        byte[] encoded = key.getEncoded();
        return encoded;
    }
}

2、配置shiro安全管理器,使用密钥生成工具生成的随机密钥

<!-- 安全管理器 -->
	<bean id="defaultWebSecurityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
		<property name="rememberMeManager" ref="rememberMeManager"/>
	</bean>
<!--使用动态密钥生成工具-->
	<bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">
		<property name="cipherKey" value="#{T(com.xxx.utils.GenerateCipherKey).generateNewKey()}"></property>
	</bean>

附上漏洞检测工具地址:

经验分享 程序员 微信小程序 职场和发展