PHP de connexion avec des mots de passe hachés
Comme le suggère le titre, je vais avoir des problèmes de connexion des utilisateurs, après le malaxage de leurs mots de passe dans le formulaire d'inscription. J'ai utilisé PHP intégré dans password_hash() et password_verify() fonctionne, mais ses sur signin.php où password_verify() est utilisé que je vais avoir des ennuis. Je sais que l'un des paramètres à password_verify() est une table de hachage, mais comment puis-je utiliser le même hash généré et stocké dans signup.php pour être en mesure d'utiliser dans cette fonction?
NOTE: Oui, il y a plus de deux de ces ensembles de code! Connexion de base de données fonctionne, toutes les variables ne sont pas définis dans ces bits SONT définis en quelques lignes. signup.php fonctionne parfaitement et la forme des données, y compris le hachage de mot de passe sont correctement stockés dans ma base de données.
voici la partie de signup.php où le hachage est mis en œuvre:
$hash = password_hash($password, PASSWORD_DEFAULT);
$sql = "INSERT INTO users (id, full_name, email, password, username, sign_up_date, activated) VALUES ('', '$full_name', '$email', '$hash', '$username', '$date', '1')";
et voici la partie de signin.php où l' (sans doute même) de hachage est nécessaire:
$password = mysqli_real_escape_string($_POST['password']);
if (!password_verify($password, $hash)) {
echo 'Invalid password.';
exit;
}
$sql = "SELECT id, email, password FROM users WHERE email = '$email' AND password = '$password' AND activated = '1' LIMIT 1";
$query = mysqli_query($conn, $sql);
EDIT: j'ai compris moi-même un jour plus tard, avait pour récupérer le hash stocké dans la base de données à l'aide de "SELECT * from...", puis la comparer avec le mot de passe entrés avec password_verify(). Merci pour l'aide quand même!
Pendant le processus de connexion, d'abord désinfecter votre
$_POST['password']
. Ensuite, utiliser le même algorithme de hachage (dans votre cas password_hash($password, PASSWORD_DEFAULT);
) puis de le comparer avec les mots de passe de votre base de données.pourquoi désinfecter le pw? ça va être haché, de toute façon.
Êtes-vous de laisser suffisamment de caractères pour être stockées dans votre base de données de la table? Si vous avez quelque chose comme VARCHAR(50), c'est de couper le mot de passe haché. Le chiffrement est généralement 128 ou 256.
Vérifier cela...peut être très utile pour vous github.com/panique/php-login-minimal
OriginalL'auteur t_soist | 2015-08-21
Vous devez vous connecter pour publier un commentaire.
Je suis pas certaine où, exactement, est le problème. Vous avez dit que vous avez déjà stocker le mot de passe haché (avec
password_hash()
) dans votre base de données. De sorte que le flux de production de base serait:a) Enregistrer le hachage du mot de passe donné lors de l'enregistrement dans votre base de données (pas le mot de passe en texte clair):
b) Si un utilisateur tente de connexion, vous obtenez tout simplement la valeur de hachage à partir de la base de données
WHERE email = '{$_POST['email']}
et ensuite utiliser lepassword_verify
fonction:Cela vous aide?
elle fonctionne. merci
Quel est l'avantage de faire la vérification dans le script rapport à l'envoi de la valeur de hachage et le nom dans la requête? Ne
password_verify
exécuter des vérifications supplémentaires? J'aimerais bien le savoir. Merci.Sur le haut de ma tête que je pense sur la raison:
password_verify
ou de hachage par défaut et la comparaison pourrait changer dans l'avenir et ainsi, et il est plus sûr et plus l'avenir de l'utilisation de la fonction fournieMerci. J'ai aussi découvert que
password_hash
crée une table de hachage avec un autre sel à chaque fois. Alors en passant directement dans la base de données retournera toujours un jeu de résultats vide. Donc,password_verify
fait ce qu'il dit il le fait.OriginalL'auteur puelo
Je suis assez confus avec votre question, mais je crois que vous voulez convertir la signature de l'utilisateur, du mot de passe de hachage et puis le vérifier?
Pourquoi vous voulez vérifier le mot de passe de toute façon?
Mais vous pouvez y arriver de cette façon, si je t'ai eu droit:
le mot de passe est celui que vous avez reçu de l'utilisateur, vous convertir de hachage, puis de le vérifier, mais ça ne fonctionne toujours pas faire de sentiment pour moi, pourquoi vous voulez le faire?
Oui cela fonctionne, parce que pour ce que je vois, il vous comparer le hash du mot de passe saisi lors de la connexion à l'encontre du MÊME mot de passe. Vous pourriez fondamentalement rien saisir et de travail. Vous avez besoin de prendre le hachage de la base de données.
OriginalL'auteur Manam