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

时间:2014-03-03 19:31:32

标签: php mysql login

我最近开始学习PHP,并尝试按照本指南http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL创建安全登录。

除了登录()之外,一切似乎都适合我。我调整了一下。 我把一些回声试图指出错误,它会在密码上返回错误比较IF:

该函数返回:登录功能错误1

位于includes / functions.php中的函数登录:

    $password = hash('sha512', $password . $salt);

    if ($db_password == $password) {
                echo "Password is correct!";

sha512.js来自pajhome.org。 uk / crypt / md5 / sha512 .html, 和上面提到的WikiHow的形式。

连接不是问题我使用相同的连接插入MySQL并且它可以工作。

感谢您对我的问题的关注,如果我没有透露足够的信息,请提供建议。

编辑:删除了很多代码,因为@SeanWM评论说我不应该指望没有人通过所有代码。

@Robert Rozas感谢您的帮助。密码确实不匹配。 输出是:

登录功能错误1 c2d872cb4c6a1b3c22ce35fb9dc0dfca14aa6d48 vs c2d872cb4c6a1b3c22ce35fb9dc0dfca14aa6d48cc2e8c3dcf02c87a3dfb7e3fec2a098b932c11655960e43bb89af058220ff8d75c666fe57ef7206b74d5f9af

请查看密码的构造方式:

它从注册表格转到.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修改代码 正如Second Rikudo所建议的那样。

1 个答案:

答案 0 :(得分:1)

如果我弄错了,请纠正我,但是你在注册时(使用JavaScript一次,使用PHP一次)密码两次,但是当你登录时,你只需哈希一次(使用PHP)。

作为旁注, sha512 安全。升级到PHP5.5以使用 password_hash() 和其他密码功能。

如果您无法升级,请参阅 ircmaxell's library for forward compatibility with those functions (他实际上是将password_*()添加到PHP中的人,所以他的图书馆很好。)