0

什么用于密码安全?

作为这方面的新手(以及一般的编码),我一直在查看各种关于 PHP 和密码安全性的不同教程、文章等。当使用 mysql db 和 php 时,这导致了各种不同的解决方案。不幸的是,所有这些不同的文章和/或教程似乎相互矛盾。有人说 md5 适合“主流”用户,其他人推荐 sha1 或 crypt()。现在,据我所知,只有 crypt() 似乎是一个“可行的”解决方案。使用 md5 似乎并不完全安全,有各种不同的在线解密站点。使用 sha1,即使使用盐,似乎也没有任何好转。这里给出了一个简短的演示:

http://www.youtube.com/watch?v=lrGMxH8WNZ8

所有这些都引出了我的问题。什么是 mysql 驱动的论坛站点的最佳解决方案?它至少在原则上不包含任何“个人信息”(不记得正确的英文术语)。是否有必要制定一些 SSL 解决方案或......?

谢谢你。

4

2 回答 2

2

每个人都会吹捧 bcrypt 是可靠的。但我更喜欢 php 5.5 中标准的新 PHP5 API 密码哈希函数。

在这里阅读

这超级简单,而且据我所知超级安全。

只需在您的数据库和您的集合中设置一个 60 长度的 varchar

$hash = password_hash($password, PASSWORD_BCRYPT);

并验证:

if (password_verify($password, $hash)) {
    // password valid!
} else {
    // wrong password :(
}

由于并非所有托管服务器都提供 5.5,因此您可以在此处获取课程

就 SSL 而言,这是推荐的。

于 2013-09-04T16:17:45.263 回答
2

md5 和 sha 并不能真正使用 - http://www.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash

此外,无论您存储无聊的非敏感信息还是政府机密,您都应该使用最安全的方法。如果您的站点计划在所有这些都实施后发生了变化,并且您突然需要存储敏感数据怎么办?
如果有人通过不安全的方法入侵您的非敏感数据库并擦除所有内容怎么办?丢失所有数据并不得不从备份中恢复可能只不过是一种痛苦,但对我来说,这本身就足够了。
此外,由于有人入侵了您的数据库,如果他们稍后返回并再次这样做,您最终将不得不更新您的登录方法。

除此之外,为什么不从一开始就学习最佳实践,那么您所做的任何网站都是最佳安全方法?为什么要为一个站点学习简单且不太安全的方法,以便以后为另一个站点学习不同的方式?
始终学习最佳实践并始终使用它,然后您只需要在所有代码中学习和使用一种方法,因此从实践中可以使您更有效率和知识渊博。

crypt 和 Blowfish 的组合几乎是我现在的方式。它从注册中获取用户密码,并将散列字符串和唯一盐一起吐出,始终相同的字符长度,因此您可以轻松地在数据库中管理它。
所有用户的盐都是不同的,因此有人获取您所有的数据库数据并计算出一个密码盐是如何形成的,这几乎是不可能的,只获得一个密码,而绝不是获取其他密码的方法。

然后,当用户登录时,您只需使用内置函数检查他们输入的密码,从登录表单到数据库中的密码,然后库计算出哈希/盐/等并检查两者。如果匹配,则登录,否则不登录。

于 2013-09-04T16:26:02.327 回答