我最近开始学习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所建议的那样。
答案 0 :(得分:1)
如果我弄错了,请纠正我,但是你在注册时(使用JavaScript一次,使用PHP一次)密码两次,但是当你登录时,你只需哈希一次(使用PHP)。
作为旁注, sha512 不安全。升级到PHP5.5以使用 password_hash()
和其他密码功能。
如果您无法升级,请参阅 ircmaxell's library for forward compatibility with those functions (他实际上是将password_*()
添加到PHP中的人,所以他的图书馆很好。)