我知道我应该将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. OAuth:我应该在令牌中存储哪些信息
- 5. Rails和Omniauth - 我应该保存多少验证散列数据?
- 6. 下载网页时我应该保存哪些元数据?
- 7. Java - 将数据保存到散列图
- 8. 使用Rails序列化将散列保存到数据库
- 9. 哪些SQL应该用于库存表
- 10. 在保存到数据库之前修改数据
- 11. 保存到数据库之前编辑数据
- 12. 如何在保存到数据库之前合并数据?
- 13. CakePHP在保存到数据库之前更改数据
- 14. jquery在将信息保存到数据库之后,将ul添加到ul
- 15. 如何将散列数组保存到数据库?
- 16. PHP:我应该在哪里存储信息和警告信息
- 17. 将信息保存到散列表或向量中
- 18. 在保存到sqlite数据库之前(和之后)比较NSString
- 19. 我应该在哪里保存一个半临时数据库?
- 20. 我应该在哪里保存数据库文件?
- 21. 如何在关联保存之前保存关联信息?
- 22. 将密码和信息存储在数据库中时用户名应该散列吗?
- 23. 我应该将网站重要数据保存到数据库
- 24. 我应该使用哪个列表来存储玩家信息?
- 25. 如何散列密码并保存到数据库表中?
- 26. 将arrayList散列表保存到数据库中
- 27. 我应该在哪里保存序列化的数据文件?
- 28. 在保存到数据库之前比较字节数组
- 29. Django - 将Facebook信息从社会登记保存到数据库
- 30. 无法将信息保存到数据库 - UNC共享问题?
MD5是* hash *算法,不是* encryption *。如果你有一个只能被特定个人阅读的“封闭式论坛”,那么你可能会考虑使用gpg之类的内容来加密内容,并且每个人都应该能够阅读内容。然后他们可以用他们的私钥解密内容(当然他们不会发送给你)。除了最安全的应用程序之外,这对于所有应用程序来说可能都是过分的。 –
你不应该md5(password.salt)。你应该使用像bcrypt这样的专用密码哈希算法。 md5坏了,不应该被认为是安全的。其他“普通”散列(如SHA1或SHA2)也不适用于安全密码存储。 –