hash_equals

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

hash_equalsComparación de strings resistente a ataques temporales

Descripción

hash_equals(#[\SensitiveParameter] string $known_string, #[\SensitiveParameter] string $user_string): bool

Verifica si dos strings son iguales sin revelar información sobre el contenido de known_string mediante el tiempo de ejecución.

Esta función puede ser utilizada para mitigar ataques temporales. La ejecución de una comparación regular con === tomará más o menos tiempo dependiendo de si las dos valores son diferentes o no y según la posición en la que la primera diferencia pueda ser encontrada, dejando así filtrar información sobre el contenido de la known_string secreta.

Precaución

Es importante pasar el string proporcionado por el usuario como segundo argumento en lugar del primero.

Parámetros

known_string

El string conocido que debe ser mantenido en secreto.

user_string

El string proporcionado por el usuario a comparar.

Valores devueltos

Retorna true si los dos strings son iguales, false en caso contrario.

Ejemplos

Ejemplo #1 Ejemplo dehash_equals()

<?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;
}
?>

El resultado del ejemplo sería:

The value is correctly signed.

Notas

Nota:

Ambos argumentos deben tener la misma longitud para ser comparados con éxito. Cuando se pasan argumentos de longitud diferente, false es retornado inmediatamente y la longitud del string conocido puede ser revelada en caso de ataque temporal.

Ver también

  • hash_hmac() - Genera un valor de clave de hash utilizando el método HMAC

add a note

User Contributed Notes

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