php - 无法登录我的安全登录脚本 PHP 和 MySQL

标签 php mysql authentication

我最近开始学习 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/

相关文章:

python - Django View 之间的身份验证

php - 图片无法加载

php - 使用关系数据库来存储面对面游戏的结果

php - 输入类型文本不适用于弹出窗口

php - 如何从两个不同的表中获取 session 变量?

javascript - 从共享点页面 javascript 调用 Office 365 经过身份验证的 Web api

php - Symfony EasyAdminBundle 3 覆盖 createIndexQueryBuilder()

mysql - 在 MySQL 中最后创建的表之前获取一个

mysql - 导入ODS到phpmyadmin错误1117 : too many columns

java - 如何在不使用 JNI 的情况下针对 Java 中的 native 操作系统进行身份验证?