使用哈希进行php密码检查不起作用

时间:2015-09-07 06:49:17

标签: php linux hash passwords

我在php中写了一个登录页面和一个检查页面。在我的本地计算机上它可以工作,但在服务器上它没有(如果我在Windows上,而服务器在Linux上)。

以下是检查页面中的代码:

$user = $_POST['userName'];
$pass = $_POST['pass'];

$saltSQL = 'SELECT salt FROM agents WHERE name="' . $user . '"';
$saltResult = mysql_fetch_array(mysql_query($saltSQL));
$salt = $saltResult['salt'];

$passToCheck = hash('sha512', $salt + $pass);

$rowAgent = mysql_fetch_array(mysql_query('SELECT * FROM agents WHERE name ="' . strtolower($user) . '"'));

if ($rowAgent['password'] != $passToCheck) {
    header("location:mainLogin.php");
    exit;
}

header("location:selectamount_new.php");

奇怪的是,当我输入带有字母输入密码的东西时,系统让我进去(无论如何),当我输入数字时,系统会正确检查密码,不会让我进去(将将我重定向到mainLogin.php而不是selectamount_new.php)。

再一次在我的本地机器上运行得很好,问题是当我用Git将代码推送到Linux机器(AWS)时。

1 个答案:

答案 0 :(得分:4)

问题发生在$salt + $pass。这不是连接,是+运算符,就像在数学中一样。所以string + string = nothing,这意味着每个密码都匹配。 number + string = number,这就是为什么数字有效。你应该在这里使用.运算符,这意味着连接。

无论如何,如果您没有针对SQL注入的证据,那么无论此修复程序如何,任何人都可以登录您的网站。