2015-09-07 6 views
0

Я пишу страницу входа и страницу проверки на php. На моей локальной машине это работает, но на сервере это не так (если это важно, я нахожусь на Windows, а сервер на Linux).php password check with hash не работает

Вот код на странице проверки:

$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).

Снова на моей локальной машине все работает отлично, проблема в том, что когда я нажимаю код на Linux-машину (AWS) с Git.

+0

Являются ли кодировки символов одинаковыми на локальном компьютере и на сервере? –

+0

Семейство SHA- * не подходит для хэш-паролей, потому что алгоритм работает слишком быстро. Посмотрите на функции [password_hash()] (http://www.php.net/manual/en/function.password-hash.php) и [password_verify()] (http://www.php.net /manual/en/function.password-verify.php). – martinstoeckli

+0

@martinstoeckli спасибо! но, к сожалению, я в настоящее время не могу их использовать, я работаю над системой с PHP версии 5.3. К счастью, это временно, мы создаем новый back-end, и версия PHP будет более новой, поэтому я буду использовать их в будущем. – Nir

ответ

4

Проблема в $salt + $pass. Это не конкатенация, это + оператор, как в математике. Итак, string + string = nothing, это означает, что каждый пароль будет соответствовать. number + string = number, вот почему с цифрами это работает. Вы должны использовать здесь оператора ., что означает конкатенацию.

В любом случае, если вы не доказали, что SQL-инъекция, каждый сможет зарегистрироваться на вашем сайте, независимо от этого исправления.

+0

Спасибо, это сработало! Я новичок в PHP и не заметил этого .. \: И я забочусь о части SQL Injection, система еще не открыта. – Nir

+0

@Nir: Также избавьтесь от SHA-512 и используйте что-то безопасный как bcrypt, scrypt или pdkdf2. – SilverlightFox