我最近开始学习 PHP,并尝试按照本指南 http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL 创建一个安全登录.
除了登录()之外,一切似乎对我来说都工作正常。我稍微调整了一下。 我放了一些 echo 来尝试查明错误,它在密码比较 IF 上返回错误:
函数返回:登录功能错误1
函数登录位于includes/functions.php:
$password = hash('sha512', $password . $salt);
if ($db_password == $password) {
echo "Password is correct!";
sha512.js 来自 pajhome.org。英国/crypt/md5/sha512 .html, 以及上述 WikiHow 中的表格。
如果我使用相同的连接插入 MySQL 并且它可以工作,那么连接不是问题。
感谢您对我的问题的关注,如果我没有透露足够的信息,请提出建议。
编辑:删除了很多代码,正如 @SeanWM 评论的那样,我不应该指望没有人会检查所有代码。
@Robert Rozas 感谢您的帮助。密码确实不匹配。 输出为:
登录功能错误1 c2d872cb4c6a1b3c22ce35fb9dc0dfca14aa6d48 vs c2d872cb4c6a1b3c22ce35fb9dc0dfca14aa6d48cc2e8c3dcf02c87a3dfb7e3fec2a098b932c11 655960e43bb89af058220ff8d75c666fe57ef7206b74d5f9af
请看一下密码是如何构造的:
它从注册表单到.js:
// Add the new element to our form.
form.appendChild(p);
p.name = "p";
p.type = "hidden";
p.value = hex_sha512(password.value);
然后通过php:
$password = filter_input(INPUT_POST, 'p', FILTER_SANITIZE_STRING);
// Create a random salt
$random_salt = hash('sha512', uniqid(openssl_random_pseudo_bytes(16), TRUE));
// Create salted password
$password = hash('sha512', $password . $random_salt);
然后插入MySQL。如果您可以,请再次指出我正确的方向,我将不胜感激。
编辑2:感谢@Second Rikudo的输入,它在删除双重哈希后起作用了
但是根据 Second Rikudo 的评论“sha512 不安全” 和@tadman“该教程非常不完整,并且使用了危险的不良做法” 我决定利用 https://github.com/ircmaxell/password_compat 修改代码 按照第二六堂的建议。
最佳答案
如果我错了,请纠正我,但是您在注册时对密码进行了两次哈希处理(一次使用 JavaScript,一次使用 PHP),但当您登录时,您只哈希一次(使用 PHP)。
顺便说一句,sha512不安全。升级到 PHP5.5 即可使用 password_hash()
和其他密码功能。
如果无法升级,请参阅ircmaxell's library for forward compatibility with those functions (他实际上是将 password_*()
添加到 PHP 中的人,所以他的库很好)。
关于php - 无法登录我的安全登录脚本 PHP 和 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22155584/