Shiro使用官方方法生成密鑰


原文鏈接:這里

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表示你項目的地址,也就是你上面定義類的地址。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM