CakeFest 2024: The Official CakePHP Conference

hash_equals

(PHP 5 >= 5.6.0, PHP 7, PHP 8)

hash_equalsComparaison de chaînes résistante aux attaques temporelles

Description

hash_equals(string $known_string, string $user_string): bool

Vérifie si deux chaînes de caractères sont égales sans divulguer d'informations sur le contenu de known_string via le temps d'exécution.

Cette fonction peut être utilisée pour atténuer les attaques temporelles. L'exécution d'une comparaison régulière avec === prendra plus ou moins de temps selon que les deux valeurs sont différentes ou non et selon la position à laquelle la première différence peut être trouvée, laissant ainsi filtrer des informations sur le contenu de la known_string secrète.

Attention

Il est important de passer la chaîne fournie par l'utilisateur en tant que second paramètre plutôt qu'en premier.

Liste de paramètres

known_string

La chaîne de caractères connu qui doit être gardé secrete.

user_string

La chaîne fournie par l'utilisateur à comparer contre.

Valeurs de retour

Retourne true si les deux chaînes sont égales, false sinon.

Exemples

Exemple #1 Exemple dehash_equals() example

<?php
$secretKey
= '8uRhAeH89naXfFXKGOEj';

// Value and signature are provided by the user, e.g. within the URL
// and retrieved using $_GET.
$value = 'username=rasmuslerdorf';
$signature = '8c35009d3b50caf7f5d2c1e031842e6b7823a1bb781d33c5237cd27b57b5f327';

if (
hash_equals(hash_hmac('sha256', $value, $secretKey), $signature)) {
echo
"The value is correctly signed.", PHP_EOL;
} else {
echo
"The value was tampered with.", PHP_EOL;
}
?>

L'exemple ci-dessus va afficher :

The value is correctly signed.

Notes

Note:

Les deux arguments doivent être de même longueur pour être comparés avec succès. Quand des arguments de longueur différente sont passés, false est retourné immédiatement et la longueur de la chaîne connue peut être dévoilée en cas d'attaque temporelle.

Voir aussi

  • hash_hmac() - Génère une valeur de clé de hachage en utilisant la méthode HMAC

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top