Adição de salt na autenticação
Agora precisamos alterar a autenticação. Aqui as mudanças serão mais substanciais.
Já não será possível verificar a correção do par login-senha imediatamente, com uma única consulta. Por quê: porque, para verificar a senha, é necessário obter seu hash com salt, e o salt está armazenado no banco de dados e é único para cada login.
Será necessário primeiro obter o registro apenas pelo login, ler o salt, aplicar o salt à senha inserida e comparar com a senha com salt do banco de dados, e somente se coincidirem, - autenticar o usuário.
Leve em consideração que pode acontecer do login digitado estar incorreto, neste caso a verificação da senha pode ser omitida, e imediatamente informar que a autenticação não é possível - dados incorretos:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
// existe um usuário com este login, agora é preciso verificar a senha...
} else {
// não há usuário com este login, exiba uma mensagem
}
?>
Vamos adicionar a verificação da senha:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
$salt = $user['salt']; // salt do banco de dados
$hash = $user['password']; // senha com salt do banco de dados
$password = md5($salt . $_POST['password']); // senha com salt do usuário
// Comparamos os hashes com salt
if ($password == $hash) {
// está tudo ok, autenticamos...
} else {
// a senha não confere, exiba uma mensagem
}
} else {
// não há usuário com este login, exiba uma mensagem
}
?>
Por motivos de segurança, normalmente não se informa ao usuário o que exatamente não conferiu - o login ou a senha, para dificultar a tentativa de pares login-senha por hackers. Simplesmente exibe-se uma mensagem informando que o par login-senha está incorreto ou algo nesse sentido.
Implemente a autenticação com senha com salt descrita acima. Tente registrar-se, autenticar-se, certifique-se de que tudo funciona.