如何使用password_verify()从数据库中检索密码?
如何使用password_verify()从数据库中检索密码?
我正在学习PHP,并且作为一个项目,我开始构建一个社交网络。我已经创建了注册表单和登录表单,并且可以将用户添加到我的数据库中。我还对他们的密码进行了哈希处理。这是一个简单的网站,仍在不断改进中,所以存在许多安全漏洞。\n我的问题出现在登录文件中,我似乎无法将用户与他给我的密码匹配。为了验证用户密码,我使用了password_verify()
函数,但似乎不起作用。\n这是我的代码:\n注册\n
\n登录\n
\n清理函数\n
function sanitize($conn, $val){ $val = stripslashes($val); $val = mysqli_real_escape_string($conn, $val); }
\n通过运行程序print \"哈希密码 = ${row[\'Password\']}\";
,可以打印出与我的数据库中的哈希密码相同的哈希密码,但由于某种原因,在此之后我被重定向到print \"用户名或密码不匹配\";
语句。
问题出现的原因是数据库中的密码列长度不够,password_hash()函数创建的哈希密码是60个字符长的字符串,而密码列只有10个字符长。
解决方法是重新注册一个新用户并使用正确长度的密码列,然后再次登录。参考手册中的示例代码如下:
上面的示例将输出类似于:`$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a`
此外,还可以通过修改密码字段的大小来解决问题,而无需删除表格并重新开始。可以参考Stack上的这个问题和答案:[How can I modify the size of column in a mysql table?](https://stackoverflow.com/questions/1279568)。也可以参考MySQL的官方文档:[ALTER TABLE](https://dev.mysql.com/doc/refman/5.0/en/alter-table.html)。
需要注意的是,修改密码字段的大小后,仍然需要重新输入新的哈希密码。
另外,还需要注意防止SQL注入攻击。可以使用预处理语句来避免此类攻击。可以参考维基百科的[Prepared statement](https://en.wikipedia.org/wiki/Prepared_statement)了解更多相关信息。
希望上述解决方法对你有帮助。