2012-04-26 59 views
2

您建議如何在Spring MVC應用程序(或實際上在任何其他JAVA Web MVC應用程序中)存儲自定義敏感數據?假設我有一個API密鑰,我需要它可用於我的控制器。幾種解決方案,我能想到的:使用Java和Web開發:存儲自定義敏感數據(如私鑰,API密鑰等)的良好實踐

靜態類:

public final static String API_KEY = "my-api-key"; 

2-使用上下文參數(web.xml):

<context-param> 
    <param-name>apiKey</param-name> 
    <param-value>my-api-key</param-value> 
</context-param> 

3-使用自定義文件.properties

apiKey=my-api-key 

4-使用自定義.xml文件:

<entry key="apiKey">my-api-key</entry> 

任何其他的想法/解決方案,你可以有:)

感謝。

回答

1

取決於您需要該信息的安全程度。

在用你列出的選項,我相信選擇(1)

public final static String API_KEY = "my-api-key"; 

是因爲它java文件編譯成class文件和分發的快速檢查比較安全不會讓任何人看到了API鍵,但不利之處在於它被硬編碼,如果沒有重新編譯就無法更改。

我會建議在代碼中使用硬編碼密碼,然後使用類似DES的密鑰對密鑰進行加密。然後加密的密鑰可以存儲爲屬性文件或其他。

+0

你說得對,好點。 – sp00m 2012-04-26 09:23:10

+0

這就是我選擇的解決方案:) – sp00m 2012-04-26 15:18:55

2

以上任何一種看起來都不錯,如果您對任何開發人員/管理員都能看到密鑰感到高興。您也可以將其存儲在數據庫,目錄等中。

這對於用戶密碼是不可接受的,因爲沒有人應該能夠看到這些密碼。密碼會更好地存儲爲單向散列 - 我不是安全專家,但我認爲md5被認爲是弱的,其他人則推薦像SHA-256。

你也許應該考慮其他的事情是:

  • 文件/目錄的權限(該用戶/用戶組可以讀/寫文件)
  • 是否需要通過線路進行加密(在這種情況下,你需要一個公鑰/私鑰)
+0

關於用戶密碼(例如),我已經將他們的SHA哈希存儲在我的數據庫中。但是,無論如何感謝:) – sp00m 2012-04-26 08:31:31

1

如果你使用spring-framework,我建議使用jasypt庫。我允許您加密某些屬性並將主密碼外部化到註冊表或其他位置。

走這條路線時,還建議您在應用程序外部有一個屬性文件,客戶端可以將其加密屬性覆蓋默認應用程序交付的屬性文件。

+0

是的,看起來很有趣!我不確定這是一個很好的解決方案,只存儲API密鑰(例如),但我會看看。謝謝! – sp00m 2012-04-26 09:20:06

相關問題