Dans PHP, la fonction HASH_EQUALS est largement utilisée pour comparer en toute sécurité deux chaînes, en particulier pour vérifier que les valeurs de hachage sont cohérentes, évitant ainsi la vulnérabilité de la fuite de temps causée par les comparaisons traditionnelles de chaînes (attaque de synchronisation). Time Attack utilise le décalage horaire causé par une correspondance différente de caractère pendant le processus de comparaison pour deviner les informations sensibles. HASH_EQUALS ENTÉCENCE Effectivement, de telles attaques par une comparaison de temps fixe.
Cependant, l'utilisation correcte de Hash_equal peut vraiment garantir la sécurité. Cet article présentera comment utiliser Hash_Equals dans des applications réelles et évitera les vulnérabilités potentielles d'attaque en temps.
Des comparaisons de chaînes ordinaires telles que == ou == renverront le résultat immédiatement lorsque le premier caractère différent sera rencontré, ce qui permet à l'attaquant de deviner progressivement le contenu correct de la chaîne en mesurant le temps de réponse.
HASH_EQUALS garantit que le processus de comparaison prend presque le même temps quel que soit le contenu de la chaîne et élimine les fuites d'informations causées par les différences de temps.
<?php
$known_hash = hash('sha256', 'secret_password');
$user_hash = $_POST['password_hash'];
if (hash_equals($known_hash, $user_hash)) {
echo 'La vérification est réussie';
} else {
echo 'Échec de la vérification';
}
?>
Dans cet exemple, Hash_Equals compare en toute sécurité deux valeurs de hachage pour éviter la fuite de temps causée par une comparaison directe avec == .
Remarque: Hash_Equals exige que les deux chaînes aient la même longueur, sinon FAUX sera retourné directement.
Si les deux chaînes ont des longueurs différentes, HASH_EQUALS reviendra immédiatement False , ce qui peut exposer des informations de longueur. Bien que les informations de longueur ne provoquent généralement pas de problèmes de sécurité graves, une fuite de longueur peut également être exploitée dans des environnements extrêmes.
Solution:
Sortie de longueur unifiée, comme l'utilisation d'une valeur de hachage de longueur fixe.
Évitez de comparer directement les mots de passe en texte brut, et vous devez toujours avoir les mots de passe et les comparer après le hachage.
Choisissez un algorithme de hachage fort pour générer des valeurs de hachage, telles que Sha256 et Sha512 , et évitez d'utiliser des algorithmes obsolètes ou dangereux.
Traitez toujours les informations sensibles d'abord via la fonction de hachage, puis comparez-la avec Hash_Equals . La comparaison directe des mots de passe en texte brut ne peut en aucun cas empêcher les attaques de temps.
<?php
// Hachage de mot de passe pré-stocké,En utilisant des algorithmes de sécurité
$stored_hash = hash('sha256', 'user_password_secret');
// Entrée de l'utilisateur
$user_input = $_POST['password'] ?? '';
// Calculez d'abord l'entrée de hachage par l'utilisateur
$user_hash = hash('sha256', $user_input);
// utiliser hash_equals Faire la comparaison de la sécurité temporelle
if (hash_equals($stored_hash, $user_hash)) {
echo 'Connectez-vous avec succès';
} else {
echo 'La connexion a échoué';
}
?>
Cet exemple profite pleinement des fonctionnalités de sécurité de Hash_Equals pour éviter les attaques de temps. Même si un attaquant essaie de deviner le mot de passe plusieurs fois, le mot de passe correct ne peut pas être déduit du temps de réponse.
Utilisez des fonctions de hachage de mot de passe spécial telles que Password_Hash () et Password_verify () pour le processus de vérification du mot de passe, qui implémentent en interne la logique de vérification plus sûre et plus complexe.
Utilisez HTTPS dans la transmission du réseau pour empêcher les intermédiaires d'écouter.
Mettre à jour et mettre à jour régulièrement les versions PHP pour assurer la sécurité et les performances des fonctions intégrées.
En utilisant correctement Hash_Equals et en combinant des politiques de hachage sécurisées, il peut effectivement prévenir les vulnérabilités potentielles d'attaque en temps et assurer la sécurité de l'application.
La sécurité n'a rien de petit, les détails déterminent le succès ou l'échec. J'espère que cet article peut vous aider à mieux comprendre et à comparer la sécurité du temps en PHP.