我知道我應該將md5(password.salt)保存到數據庫中。但我有一些好奇的問題: +我也應該md5的內容/文本字符串以及密碼爲鹽)? 示例:如果數據庫被泄露,攻擊者無法讀取封閉論壇的內容 +如果我不應該讀取內容並將它們全部保存爲純文本,那麼攻擊者試圖獲取用戶密碼有什麼意義當他手頭有數據庫?保存到數據庫之前應該散列哪些信息?
回答
散列密碼的目的是爲了防止獲得訪問數據庫的第三方知道用戶密碼是什麼。你的數據庫內容已經被盜用了,所以論壇內容已經暴露。你不想要的是讓人們的密碼受到損害,因爲許多人在多個網站上使用相同的密碼。
如果你有一個安全的論壇,那麼你需要防止攻擊者訪問數據庫。如果他們進入,您的論壇帖子就會暴露。不要試圖進一步保護他們。這個想法是,如果攻擊者獲得對數據庫的訪問權限,那麼您已經限制了損害的表面積。您的網站數據被泄露,但希望不是用戶的憑據。有些人會在您的網站上使用他們的銀行用戶名和密碼,這就是您想要保護的。
請記住,散列函數是一種方法。你不能取消散列數據。這對密碼很好:你不需要知道人們的密碼是什麼,你只需要能夠比較它們。它不適用於論壇帖子。散列不是加密。加密的數據可以被解密。散列數據不能被散列。
謝謝!現在理解了。 – gaixixon
@gaixixon - 真正考慮使用BCrypt,這個[tutorial](http://www.martinstoeckli.ch/hash/en/index.php)描述了爲什麼你需要像BCrypt這樣慢速的密鑰派生函數。我在使用PHP,可以使用PHP的5.5實現,[兼容包](https://wiki.php.net/rfc/password_hash)可用。 – martinstoeckli
- 1. 嘗試保存在cookie中之前哪些信息應該被認爲是關鍵的?
- 2. 我應該如何將統計信息保存到數據庫中
- 3. 我應該在散列之前對數據進行編碼嗎?
- 4. 我應該在哪裏保存數據?
- 5. OAuth:我應該在令牌中存儲哪些信息
- 6. 下載網頁時我應該保存哪些元數據?
- 7. Rails和Omniauth - 我應該保存多少驗證散列數據?
- 8. Java - 將數據保存到散列圖
- 9. 使用Rails序列化將散列保存到數據庫
- 10. 哪些SQL應該用於庫存表
- 11. PHP:我應該在哪裏存儲信息和警告信息
- 12. 如何在保存到數據庫之前合併數據?
- 13. 在保存到數據庫之前修改數據
- 14. 保存到數據庫之前編輯數據
- 15. CakePHP在保存到數據庫之前更改數據
- 16. jquery在將信息保存到數據庫之後,將ul添加到ul
- 17. 如何將散列數組保存到數據庫?
- 18. 將信息保存到散列表或向量中
- 19. 發送Javascript信息到PHP並保存到數據庫中
- 20. 在保存到sqlite數據庫之前(和之後)比較NSString
- 21. 我應該在哪裏保存數據庫文件?
- 22. 我應該在哪裏保存一個半臨時數據庫?
- 23. 在散列表或數組中保存信息,然後輸出
- 24. 如何在關聯保存之前保存關聯信息?
- 25. 我應該如何在序列化之前存儲這些數據?
- 26. 將密碼和信息存儲在數據庫中時用戶名應該散列嗎?
- 27. 我應該使用哪個列表來存儲玩家信息?
- 28. 我應該將網站重要數據保存到數據庫
- 29. 將arrayList散列表保存到數據庫中
- 30. 如何將散列保存到續集數據庫?
MD5是* hash *算法,不是* encryption *。如果你有一個只能被特定個人閱讀的「封閉式論壇」,那麼你可能會考慮使用gpg之類的內容來加密內容,並且每個人都應該能夠閱讀內容。然後他們可以用他們的私鑰解密內容(當然他們不會發送給你)。除了最安全的應用程序之外,這對於所有應用程序來說可能都是過分的。 –
你不應該md5(password.salt)。你應該使用像bcrypt這樣的專用密碼哈希算法。 md5壞了,不應該被認爲是安全的。其他「普通」散列(如SHA1或SHA2)也不適用於安全密碼存儲。 –