(PHP 5 >= 5.6.0, PHP 7)
hash_equals — Comparación de strings segura contra ataques de temporización
$known_string
, string $user_string
) : boolCompara dos strings empleando el mismo tiempo, sin importar si son iguales o no.
Esta función debería utilizarse para mitigar los ataques de temporización, por ejemplo, al probar hash de contraseñas de crypt().
known_string
El string de longitud conocida con el que comparar
user_string
El string proporcionado por el usuario
Devuelve TRUE
cuando los dos strings son iguales, o FALSE
si no.
Emite un mensaje de nivel E_WARNING
cuando ninguno de los
parámetros proporcionados es un string.
Ejemplo #1 Ejemplo
<?php
$esperado = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$correcto = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$incorrecto = crypt('apple', '$2a$07$usesomesillystringforsalt$');
var_dump(hash_equals($esperado, $correcto));
var_dump(hash_equals($esperado, $incorrecto));
?>
El resultado del ejemplo sería:
bool(true) bool(false)
Nota:
Ambos argumentos deber tener la misma longitud para que se puedan comparar. Cuando se proporcionan argumentos con diferente longitud, se devuelve
FALSE
inmediatamente, pudiéndose filtrar la longitud del string conocido en caso de un ataque de temporización.
Nota:
Es importante proveer el string proporcionado por el usuario como segundo parámetro, en vez de como el primero.