大部分开发者知道密码不能以明文形式存储,但是许多开发者仍认为使用 md5 或者 sha1 来哈希化密码是安全的。 一度,使用上述的哈希算法是足够安全的,但是, 现代硬件的发展使得短时间内暴力破解上述算法生成的哈希串成为可能。
为了即使在最糟糕的情况下(你的应用程序被破解了)也能给用户密码提供增强的安全性, 你需要使用一个能够对抗暴力破解攻击的哈希算法。目前最好的选择是 bcrypt。在 PHP 中, 你可以通过 crypt 函数 生成 bcrypt 哈希。 Yii 提供了两个帮助函数以让使用 crypt 来进行安全的哈希密码生成和验证更加容易。
当一个用户为第一次使用,提供了一个密码时(比如:注册时),密码就需要被哈希化。
$hash = Yii::$app->getSecurity()->generatePasswordHash($password);
哈希串可以被关联到对应的模型属性,这样,它可以被存储到数据库中以备将来使用。
当一个用户尝试登录时,表单提交的密码需要使用之前的存储的哈希串来验证:
if (Yii::$app->getSecurity()->validatePassword($password, $hash)) {
// all good, logging user in
} else {
// wrong password
}
本文强调了在存储用户密码时避免使用MD5或SHA1,推荐使用bcrypt作为更安全的哈希算法。在PHP中,通过Yii框架的Security组件可以方便地实现bcrypt密码哈希和验证。当用户注册时,使用generatePasswordHash函数对密码进行哈希,然后存储到数据库。在用户登录时,利用validatePassword函数验证提交的密码与存储的哈希是否匹配,确保安全性。
625

被折叠的 条评论
为什么被折叠?



