Аутентификация пользователя (с использованием sha1) - PullRequest
0 голосов
/ 19 сентября 2010

Я создаю форму входа.Я учусь использовать SHA-1 для шифрования паролей.Я использовал SHA-1 для шифрования пароля, который пользователь создал при регистрации.В базу данных я ввел вид имени пользователя и пароля, чтобы было с чем работать.У меня проблемы с получением формы входа.

// Database Connection

$con = getConnection();

$sqlQuery = mysql_query("SELECT count(*) from Customers
                         WHERE Email = '$email' and Password = sha1('$passLogin')") 

// Executing query
$result = $con->mysql_result($sqlQuery, "0");

if ($result == 0) {
    echo "Can not login, try again.";
} else {
    echo "Login Good!";
}

Ответы [ 3 ]

2 голосов
/ 19 сентября 2010

Я учусь использовать Sha1 для шифровать пароли.

... используйте пароли от sha1 до хэш . Хеширование отличается от шифрования. Шифрование обратимо, хеширование - нет. (или не должно быть). Теперь ...

  1. Вы должны убедиться, что пароли в базе данных хэшированы.

  2. Обычно вы выполняете хеширование на стороне PHP.

  3. Вы должны использовать соление, чтобы атаки на радужных столах были невозможны. Читать Просто хеширования недостаточно для хранения пароля

Тем не менее, я бы сделал часть аутентификации, как это:

$hashedAndSalted = sha1($passLogin . $yourSalt);

$sqlQuery = mysql_query("SELECT Email FROM Customers WHERE Email = '$email' AND Password = '$hashedAndSalted'");

if (mysql_num_rows($sqlQuery) == 1) {
    echo 'Login successful';
} else  {
    echo 'Could not login';
}
0 голосов
/ 19 сентября 2010

Замените ваш запрос следующим:

$sqlQuery = mysql_query("SELECT count(*) from Customers
                WHERE Email = '".$email."' and Password = '".sha1($passLogin)."'");

Не забудьте всегда объединять строки и переменные вручную, не полагайтесь на PHP, чтобы сделать это за вас. Кроме того, вы забыли точку с запятой ; после этой строки. Каждая строка должна быть дополнена точкой с запятой в PHP.

0 голосов
/ 19 сентября 2010

В отдельном примечании, если вы не санировали входные данные формы, вы широко открыты для SQL-инъекции .

Если пользователь вводит следующее для поля электронной почты:

' or '1'='1

Они будут зарегистрированы:)

Вы должны использовать mysql_real_escape_string для экранирования $email и $passLogin или даже лучше использовать подготовленные операторы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...