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>
附上漏洞检测工具地址: