0.前言
平台漏洞掃描,掃描到一堆安全問題,其中有個關於Shiro的。主要是說如果項目中shiro key為默認密鑰或者網絡公開密鑰,就可以輕易的導致遠程代碼執行。
本文框架SSM+shiro。
1.解決思路
(1)升級Shiro版本,為1.7.0以上
(2)自定義一個base 64 AES密鑰
(3)使用官方生成的方法提供密鑰
本文選擇的是第三種辦法:
我們在shrio新建一個類。參照下面的代碼進行添加:
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;
public class GenerateCipherKey {
/** * 隨機生成秘鑰,參考org.apache.shiro.crypto.AbstractSymmetricCipherService#generateNewKey(int) * @return */
public static byte[] generateNewKey() {
KeyGenerator kg;
try {
kg = KeyGenerator.getInstance("AES");
} catch (NoSuchAlgorithmException e) {
String msg="this is required to function!";
throw new IllegalStateException(msg, e);
}
kg.init(128);
SecretKey key = kg.generateKey();
byte[] encoded = key.getEncoded();
return encoded;
}
}
然后在spring-shrio.xml找到remembermeManager。添加如下代碼:
<property name="cipherKey" value="#{T(com.xxxxxx.xxxxx.shiro.GenerateCipherKey).generateNewKey()}"/>
其中,xxx表示你項目的地址,也就是你上面定義類的地址。