strcmp vs. == vs. === en PHP para verificar la igualdad de hash
Estoy usandocrypt()
a las contraseñas de hash en PHP, y estoy tratando de encontrar la forma más segura de probar la igualdad del hash resultante al realizar las comprobaciones de contraseña.
Hay tres opciones que puedo ver:
Opción 1 - dobles iguales
function checkPassword($hash, $password)
{
return crypt($password, $hash) == $hash;
}
Opción 2 - Triple igual
function checkPassword($hash, $password)
{
return crypt($password, $hash) === $hash;
}
Opción 3 -strcmp()
function checkPassword($hash, $password)
{
return strcmp(crypt($password, $hash), $hash) === 0;
}
Mi intuición me dice que la opción 1 es una mala idea, debido a la falta de verificación de tipos, y que las opciones 2 o 3 probablemente sean mejores. Sin embargo, no puedo calcular si hay un caso específico que===
ostrcmp
fallaría bajo. ¿Cuál es el más seguro para este propósito?