Dans le développement Web moderne, la sécurité des mots de passe des utilisateurs est cruciale. Avec l'avancement de la technologie, les nouveaux algorithmes de chiffrement continuent d'émerger et les anciens algorithmes peuvent ne plus sécuriser ou ne plus adapter aux besoins actuels au fil du temps. Par conséquent, les développeurs doivent souvent remplacer les algorithmes de cryptage de mot de passe sans affecter l'expérience utilisateur. PHP fournit la fonction Password_needs_Hehash () , ce qui rend la transition fluide des algorithmes de cryptage de mot de passe plus simples et plus efficaces.
Password_needs_rehash () est une fonction intégrée en PHP pour vérifier si le mot de passe stocké doit être réencragé. Sa fonction est de déterminer si la valeur de hachage de mot de passe actuellement stockée correspond au nouvel algorithme de cryptage de mot de passe, ou s'il répond aux exigences de la nouvelle algorithme. Normalement, lorsque l'algorithme de cryptage de mot de passe change, les développeurs peuvent utiliser cette fonction pour mettre à jour automatiquement le hachage de mot de passe lorsque l'utilisateur se connecte sans avoir besoin pour l'utilisateur de réinitialiser manuellement le mot de passe.
La fonction est définie comme suit:
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">password_needs_rehash</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$hash</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$algo</span></span><span> , </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$options</span></span><span> )
</span></span>$ hash : la valeur de hachage de mot de passe stocké.
$ algo : Nouveaux algorithmes de chiffrement (tels que Password_Bcrypt , Password_argon2i , etc.).
$ Options : option de configuration facultative, généralement un facteur de coût pour un tableau contenant des configurations d'algorithmes, telles que BCrypt.
Renvoie vrai si le mot de passe doit être remanié, rendez-vous faux si relassé n'est pas requis.
Lorsque l'utilisateur se connecte, nous utilisons d'abord l'ancien algorithme de cryptage pour vérifier le mot de passe entré par l'utilisateur. À ce stade, nous devons également vérifier si le hachage de mot de passe stocké doit être reconnu. Si nécessaire, chiffrez le mot de passe à l'aide d'un nouvel algorithme et mettez à jour la valeur de hachage dans la base de données.
Une fois que le mot de passe de l'utilisateur a été vérifié avec succès, vous pouvez utiliser la fonction Password_Needs_Hehash () pour déterminer si le hachage de mot de passe actuellement stocké répond aux exigences du nouvel algorithme de cryptage. Si la valeur de hachage doit être réencroilée, utilisez le nouvel algorithme pour crypter et mettre à jour le hachage.
Supposons que nous ayons utilisé l'algorithme de cryptage Password_BCrypt , et maintenant nous devons passer à Password_argon2i .
<span><span><span class="hljs-comment">// Obtenez le mot de passe entré par l'utilisateur</span></span><span>
</span><span><span class="hljs-variable">$user_input_password</span></span><span> = </span><span><span class="hljs-variable">$_POST</span></span><span>[</span><span><span class="hljs-string">'password'</span></span><span>];
</span><span><span class="hljs-comment">// Obtenez la valeur de hachage stockée de la base de données</span></span><span>
</span><span><span class="hljs-variable">$stored_hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getUserHashFromDatabase</span></span><span>(</span><span><span class="hljs-variable">$user_id</span></span><span>);
</span><span><span class="hljs-comment">// Vérifiez les mots de passe à l'aide d'anciens algorithmes de chiffrement</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">password_verify</span></span><span>(</span><span><span class="hljs-variable">$user_input_password</span></span><span>, </span><span><span class="hljs-variable">$stored_hash</span></span><span>)) {
</span><span><span class="hljs-comment">// Si la valeur de hachage doit être réencroilée</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">password_needs_rehash</span></span><span>(</span><span><span class="hljs-variable">$stored_hash</span></span><span>, PASSWORD_ARGON2I, [</span><span><span class="hljs-string">'memory_cost'</span></span><span> => </span><span><span class="hljs-number">1</span></span><span> << </span><span><span class="hljs-number">17</span></span><span>, </span><span><span class="hljs-string">'time_cost'</span></span><span> => </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'threads'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>])) {
</span><span><span class="hljs-comment">// Crypter les mots de passe à l'aide d'un nouvel algorithme de chiffrement</span></span><span>
</span><span><span class="hljs-variable">$new_hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">password_hash</span></span><span>(</span><span><span class="hljs-variable">$user_input_password</span></span><span>, PASSWORD_ARGON2I, [</span><span><span class="hljs-string">'memory_cost'</span></span><span> => </span><span><span class="hljs-number">1</span></span><span> << </span><span><span class="hljs-number">17</span></span><span>, </span><span><span class="hljs-string">'time_cost'</span></span><span> => </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'threads'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>]);
</span><span><span class="hljs-comment">// Mettez à jour la valeur de hachage dans la base de données</span></span><span>
</span><span><span class="hljs-title function_ invoke__">updateUserHashInDatabase</span></span><span>(</span><span><span class="hljs-variable">$user_id</span></span><span>, </span><span><span class="hljs-variable">$new_hash</span></span><span>);
}
</span><span><span class="hljs-comment">// Connectez-vous avec succès,Effectuer l'opération correspondante</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Connectez-vous avec succès!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-comment">// Mot de passe d'erreur</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Mot de passe d'erreur!"</span></span><span>;
}
</span></span>Password_verify () : utilisé pour vérifier que le mot de passe entré par l'utilisateur correspond à la valeur de hachage stockée.
Password_needs_rehash () : Une fois la vérification réussie, vérifiez si le hachage stocké répond aux exigences du nouvel algorithme de cryptage. En cas de réincr Risption requis, suivez les étapes suivantes.
Password_hash () : Utilisé pour crypter les mots de passe à l'aide du nouvel algorithme de chiffrement.
UpdateUserHashIndatabase () : stocke le nouveau hachage de mot de passe dans la base de données.
Lorsque vous utilisez Password_Needs_Hehash () pour remplacer l'algorithme de cryptage de mot de passe, le plus grand avantage est que l'utilisateur n'a pas besoin d'intervenir activement, et le système peut automatiquement terminer la mise à niveau de hachage de mot de passe lorsque l'utilisateur se connecte. Cette approche apporte plusieurs avantages importants:
Mise à niveau sans couture : les utilisateurs n'ont besoin de se connecter qu'une seule fois, et le système mettra automatiquement à mettre à niveau l'algorithme de cryptage de mot de passe sans réinitialiser le mot de passe.
Améliorer la sécurité : En transitionnant progressivement vers un algorithme de chiffrement plus sécurisé, le système peut améliorer la sécurité globale et éviter les vulnérabilités de sécurité causées par l'utilisation d'algorithmes obsolètes.
Compatibilité forte : pendant le processus de remplacement de l'algorithme de chiffrement, l'ancienne valeur de hachage est toujours valide, garantissant la compatibilité vers l'arrière du système et n'affectant pas les utilisateurs enregistrés.
Le remplacement de l'algorithme de cryptage de mot de passe est l'une des mesures nécessaires pour améliorer la sécurité, mais lorsque vous implémentez, vous devez considérer l'expérience utilisateur et la transition en douceur du système. La fonction Password_needs_Hehash () fournie par PHP peut aider les développeurs à migrer en douceur les algorithmes de chiffrement de mot de passe des anciens algorithmes à de nouveaux algorithmes sans interférer avec les utilisateurs. De cette façon, la sécurité du système peut être améliorée tout en garantissant que l'expérience de connexion de l'utilisateur n'est pas affectée.