大家好! 上周,我们发布了本文的
第一部分 ,这引起了严重的霍利瓦尔。
正如我们所承诺的那样,主要的抱怨之一是在文章中没有提到password_hash
,该材料的第二部分将从使用password_hash
密码哈希开始。 我们还提醒您,本文的写作灵感来自于“后端PHP开发人员”课程中新成立的小组,但该材料与培训计划无关。
您可以在开放日当天了解有关培训计划的更多信息,并使用有关“ ServerLess PHP”主题的免费网络研讨会的示例,您可以评估讲座的形式。
也许我们会总结这个已经漫长的序言,然后直接转到本文。
使用password_hash的密码哈希
此函数根据我们为其设置的参数创建密码哈希。 它使用单向算法。
我们可以通过设置选择的常量之一来选择要使用的算法类型:
- PHP 5.5的
PASSWORD_DEFAULT
使用Bcrypt作为默认算法。 但是,随着时间的流逝,随着发现新的,更安全的算法或其他因素,这种情况发生了变化。 PASSWORD_BCRYPT
创建一个crypt()
哈希。 通常它包含60个字符,可以通过其标识符以“ $ 2y $”格式进行标识。PASSWORD-ARGON2I
Argon2当前是最安全的哈希算法之一。 仅当PHP是使用Argon2编译的时才可用。PASSWORD_ARGON2ID
此哈希算法也属于Argon2家族,并使用Argon2ID(而不是I)的版本。要使其正常工作,还必须使用Argon2编译PHP。
该函数还有一个可选参数,该参数由一个关联数组组成,该数组根据所选算法接受多个键。
如果您更喜欢使用Bcrypt,则此序列的密钥将是cost的值。
如果选择使用Argon2的算法,则关联数组的键将为:
memory_cost
(一个整数,表示计算哈希所需的最大内存量),
time_cost
(一个整数,表示计算哈希所需的最大时间)和
thread
(另一个整数)一个数字,指示用于计算哈希的线程数)。
不要在PHP 7.0中指定
salt
参数,否则您将收到有关不推荐使用的方法的警告。
现在我们知道使用
password_hash()
函数需要哪些元素。 让我们看看如何开处方。
echo password_hash("MySuperPass", PASSWORD_DEFAULT); $2y$10$TLayAY8ZaAZ9FE50EylGYO9oEgrb7gsw1yzJemHdBu1gOQfyWrEUm $options = ['cost' => 12,]; echo password_hash("MySuperPass", PASSWORD_BCRYPT, $options); $2y$12$jhmTbxAuZXVtX2y.Jc8iy.dW/NENqVCeq2vuoFI9/oa4./YlzhpYO echo password_hash('rasmuslerdorf', PASSWORD_ARGON2I); $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0
首先,建议在服务器上测试此功能并配置cost参数,以使该功能在交互式系统上的执行时间少于100毫秒。
上面示例中的脚本将帮助您设置硬件的最佳成本值。
用户密码验证
您为用户提供了在新应用程序中注册的机会,他们可以在此处输入密码,并且您非常了解如何处理此密码。
通过根据最新的安全趋势对数据进行哈希处理,您不会以加密形式存储任何内容,并且服务器隐藏在10米深的地下室中。
现在呢现在,您必须允许用户登录到该应用程序。 为此,PHP具有内置功能,可检查与哈希序列匹配的密码。 该函数称为
password_verify()
。 它是这样的:
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq'; if (password_verify('rasmuslerdorf', $hash)) { echo ' !'; } else { echo ' !'; }
她有两个参数,并且两个参数都必须具有序列格式。 第一个参数是用户在帐户登录表单中输入的密码。 第二个参数是我们将参考的直接哈希数据。
结果,我们得到一个逻辑值,可以在条件操作中使用。 因此,我们可以让用户进入应用程序,也可以通知用户出了点问题。
该函数起作用是因为在上一步中(当我们对密码进行了哈希处理时),从
password_hash
返回的值包括我们使用的算法,
cost
和
salt
。
因此,
password_verify()
所需的所有信息对我们都是可用的。
PHP用户注册系统的算法
我希望您现在了解PHP开发人员在处理密码时采取的安全措施。
首先,您需要检查后请求,然后选择并计算其数据与输入的内容匹配的用户数。
如果一切顺利,我们将验证密码并将用户发送到起始页。 否则,例如,在Javascript上,我们显示带有错误通知的警告窗口。
结论
现在,您知道了如何确保应用程序的安全性以及如何正确处理密码。 遵循有用的建议不仅是您必须遵循的标准,而且应该遵循一条愉快的发展道路。
学习类似于您刚刚学习的新技术。 添加其他功能并尝试使用代码,直到您拥有出色的Web开发技能-无论是PHP还是其他能带来更多机会的语言!
阅读第一部分