2012-11-21 52 views
7

一點點背景 -在MySQL *中臨時存儲明文密碼是否安全?

我運行一個運行在Java中的遊戲服務器和一個運行在PHP(phpbb)中的論壇。我將遊戲和論壇帳戶關聯起來,以便在遊戲中更改密碼會自動更改論壇帳戶的密碼。這兩個系統使用不同的密碼散列算法,我需要使用phpbb的內置函數更新論壇端的密碼散列,這意味着我必須從PHP腳本(而不是運行自己的代碼)調用它們。

爲了做到這一點,我決定讓Java調用PHP腳本,每當需要更改密碼時向PHP腳本發出HTTP請求,以觸發完成密碼更改過程的PHP腳本論壇帳戶。但是,我不希望將純文本密碼放在任何HTTP調用中,因爲它可能會顯示在日誌文件中,也可能顯示在其他可利用的區域中。我目前的想法是,當Java端更改密碼時,會將新的明文密碼放入數據庫表中,然後發出HTTP請求來觸發PHP腳本,以避免哈希或敏感信息進入HTTP請求。 HTTP調用將僅傳遞要更改的帳戶的用戶名,以及共享密鑰加上用戶名的md5哈希以進行身份​​驗證。當PHP腳本運行時,它從數據庫中爲用戶檢索新的明文密碼,立即刪除它,然後通過phpbb的哈希算法運行明文密碼並更新論壇數據庫。

在典型情況下,明文密碼在刪除前可能會在數據庫中不到一秒。理想情況下,我不會將它存儲在任何地方,但我不確定除非我無法預測論壇的密碼哈希值是什麼,否則還不知道如何將所需的更改從Java傳遞到PHP,所以我需要以某種方式發送明文密碼到執行哈希的PHP腳本。

有關更好的方式來做到這一點的任何想法,或者是否有任何有關在很短的時間內存儲明文密碼的反饋?我認爲MySQL登錄是安全的,不會與其他人或項目共享。

謝謝!

+3

在將數據存儲在數據庫之前,您可以從Java對數據進行加密,並且在從數據庫讀取數據後立即從PHP解密它? – 0xFE

+2

加密是一個不錯的想法,因爲顯然你已經有一個共享的祕密。只需通過HTTPS和POST將用戶名和明文密碼發送到PHP,就像表單數據一樣? – slashingweapon

+4

更好的是,爲PHP BB創建一個自定義身份驗證插件https://wiki.phpbb.com/Authentication_plugins 這支持自定義密碼身份驗證方案,並且應該允許您利用單點登錄(如果適用)。 –

回答

0

加密就是這樣。

  • 加密連接:HTTPS的同義詞。如果您的服務器支持,則使用HTTPS將數據傳遞給phpbb。
  • 加密數據:或者加密密碼並以某種方式存儲密鑰(非常不安全),或者使用非對稱加密。請參閱my question的答案,以便深入瞭解如何通過安全通道發送密碼。
+0

對於我的特殊情況,此方法效果最佳,因爲它需要的工作量最少。我正在使用現有的PHP腳本並通過HTTPS使用它,並將需要通過加密連接進行散列的密碼傳遞給它。 – DivideByHero

0

這取決於您使用Java的數據庫比PHP更多。在PHP中使用PDO連接到不同的數據庫並操作數據。你可以嘗試簡單地將一個數據庫作爲主密碼存儲,而另一個數據庫則作爲salve--取決於你的反向加密。

讓PHP(例如)直接將PDO文本密碼插入臨時字段中的Java數據庫 - 當然是用戶特有的 - 然後告訴PHP觸發Java函數讀取該列,對其進行散列,更新更正列並刪除臨時字段。

如果處理得當,您可能會將漏洞的時間限制在幾毫秒內。

3

不要存儲明文密碼。 如果你的遊戲變得流行起來,它可能成爲黑客不斷攻擊的目標,特別是如果它包含貨幣方面(即 - 魔獸世界,travian等)的情況。 在這種情況下,您需要假設儘管您嘗試保護您的系統,但有人可能會破解它,並因此獲取敏感數據。 您應該使用標準加密機制來執行此任務(即 - 以安全方式通過HTTPS將密碼發送給論壇系統)。 我也建議您瀏覽@Joshua Kaiser的評論 - 單一登錄可能是解決您的需求的關鍵, 並且不要試圖在這裏重新發明輪子。我可以告訴你,我與kerberos一起工作,例如, 和Kerberos有一個票證機制,在這種機制中票證可以在應用程序中重複使用。不幸的是,我不知道PHP,不知道如何插入論壇框架使用不同的認證模塊。

P.S - 我錯誤地發佈了這個答案兩次,並嘗試按下「刪除後」 - 我希望stackoerflow照顧。