En PHP md5(‘240610708’) == md5(‘QNKCDZO’)

Via HN :

La raison de cette égalité qui semble surprenant est en réalité dû au fait que les hashs de ces chaines respectives commencent par « 0e » et sont suivies uniquement par des chiffres qui est une forme de décrire un float.
Au final PHP converti les hashs résultants en float et comme les deux valeurs sont très proches de zéro elles sont considérées égales…

On peut imaginer qu’un certain nombre d’applis web effectuent des comparaisons de ce type et permettraient alors à des attaquants de tester un même mdp pour chaque account en espérant tomber sur un hash avec ces caractéristiques.
Qui plus est ça fonctionne bien sûr avec n’importe qu’elle fonction de hashage puisque le problème vient du parseur PHP.
Pour palier à ce problème il faut utiliser l’opérateur === au lieu de ==.

2 réflexions au sujet de « En PHP md5(‘240610708’) == md5(‘QNKCDZO’) »

Les commentaires sont fermés.