Таким образом, я создаю форму для входа. Предоставление пользователю входных данных, чтобы проверить правильность формата электронной почты и пароль длиннее 6 символов, если они действительны, тогда проверьте, соответствуют ли учетные данные входа действительны, и они совпадают с электронной почтой/паролем, хранящимся в таблице пользователей. В регистрационной форме я шифрую пароль, используя sha1 и данную соль. Когда я проверю правильность пароля , я пишу одну и ту же проверку, но хотя я ввожу правильные логин учетные данные, кажется, невозможно проверить логин. Так вот мой код: Пользователь функция Логин:mysqli, sha1/salt password valid check
function user_login($email, $password){
global $db;
$salt='%#@#@**#_-!';
$userid = id_from_email($email);
$email = sanitize($email);
$password = sha1($password.$salt);
$query="SELECT UserId FROM users WHERE Email= '".$email."' and UserPass= '".$password."' ";
$result=$db->query($query);
$valid = $result->num_rows;
return ($valid >1) ? $userid : false;
}
А вот часть login.php, которая проверяет, является ли Войти правомерен:
else if(empty($errors) == true) {
$userlogin=user_login($email, $password);
if ($userlogin==false){
$errors[]='Wrong email/password combination.';
} else {
//set the user session
session_start();
$_SESSION['UserId']=$userlogin;
header('Location:success.php');
}
Независимо от того, если я ставлю правильный пароль и Эл. адрес. Она всегда выдает «комбинацию Неправильный адрес электронной почты/пароль» А вот как я храню пропуск в базе данных на register.php
$salt='%#@#@**#_-!';
$password = sha1($password.$salt);
Я был бы очень признателен, если вы могли бы помочь мне.
Thankyou.
Не по теме: пароль соль всегда должна быть случайной; цель соли состоит в том, чтобы иметь разные хэши для одного и того же пароля, поэтому, если одна учетная запись имеет скомпрометированный пароль, другие учетные записи с тем же паролем будут иметь другой хеш и не будут отличаться от того, что они имеют одинаковый пароль. Кроме того, 'sha1()' не является хорошим алгоритмом хэширования паролей, в идеале вы хотите использовать ** очень медленный алгоритм хэширования, так что принудительное принудительное переключение займет некоторое время. – lanzz
Если пароль скомпрометирован, тот же пароль будет работать и для других учетных записей с одинаковым паролем, независимо от того, сколько соли вы добавляете. Я думаю, соль для их нападающих, которые получают доступ к базе данных. Без соли они могли бы просто заменить хэш в таблице и получить доступ к веб-сайту со своим собственным паролем. Теперь они должны угадать соль (или посмотреть ее здесь на stackoverflow: p) ... –
@WouterH Да, это сработает, но вы не сможете понять, какие учетные записи используют один и тот же пароль. Если вам удастся получить хешированные пароли, было бы очевидно, какие из них используют один и тот же пароль, если они несолены. – lanzz