strcmp vs. == vs. === w PHP do sprawdzania równości hash
używamcrypt()
do haszowania haseł w PHP i próbuję wypracować najbezpieczniejszy sposób testowania równości wynikowego skrótu podczas sprawdzania hasła.
Są trzy opcje, które widzę:
Opcja 1 - Double Equals
function checkPassword($hash, $password)
{
return crypt($password, $hash) == $hash;
}
Opcja 2 - potrójna
function checkPassword($hash, $password)
{
return crypt($password, $hash) === $hash;
}
Opcja 3 -strcmp()
function checkPassword($hash, $password)
{
return strcmp(crypt($password, $hash), $hash) === 0;
}
Moja intuicja mówi mi, że opcja 1 jest złym pomysłem ze względu na brak sprawdzania typu i że opcje 2 lub 3 będą prawdopodobnie lepsze. Jednak nie mogę się zorientować, czy istnieje taki przypadek===
lubstrcmp
zawiodłoby. Co jest najbezpieczniejsze w tym celu?