16 php mysql security passwords
我正在寻求有关如何使用PHP在MySQL中安全存储密码的建议.
忽略了PHP本身的局限性,我想了解更多关于盐水,散列和加密这些坏男孩的信息.
显然人们将继续使用弱密码,除非被迫做其他事情,但这就是我存储它们对我来说很重要的方式.我的用户密码对我来说比数据库本身更重要,因此我希望以这样的方式保留它们,这对任何试图反向的脚本小子都是徒劳和单调的.显然,尽职尽责,任何事都可以被打败,但我不介意让这件事特别麻烦.
我们正在研究两种情况.
关于这个主题的任何和所有建议都得到了慷慨的赞赏.
Don*_*nut 17
使用bcrypt
.如果有人拥有数据库的用户表,那么他们可以使用暴力/彩虹表/等来表达他们内心的内容.即使使用salt,如果您正在使用MD5或其他一些快速哈希算法(顺便说一句,这些算法并不是为解决这个问题而设计的); 它可以被破解只是时间问题.
任何众所周知且广泛支持的散列算法都将具有相同的基本"缺陷"(如果你可以称之为它;它实际上就是定义).不同之处在于,当执行散列操作时,糖蜜bcrypt
很慢,使得暴力攻击效率降低得多.
有关bcrypt
其他方法的优点,以及一般密码安全的难度的绝对讨论,请阅读此主题.它有很多人的评论,比我更了解这类事情,它应该有助于你理解更多的问题.
假设您使用用户名和密码作为身份验证令牌,您可以安全地存储以下内容以确保数据不会受到损害.
使用该方案,攻击者不能对您使用彩虹表,并且密码不能通过任何(合理的)方式恢复.(也就是说,只要你的攻击者不是政府)
即使攻击者有盐和哈希对,也不可能使用彩虹表,因为无论如何都需要计算所有可能的哈希值,使用他们已经给出的盐,所以这对每个用户来说都是一个全新的暴力攻击.
即使源代码和攻击者也无法获取密码,因为强度/安全性是在哈希算法中,而不是您的代码.
根据Donut的回答,结合使用bcrypt,你真的很安全.那是: