CakeFest 2024: The Official CakePHP Conference

hash_equals

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

hash_equalsСравнивает строки без риска атаки по времени

Описание

hash_equals(string $known_string, string $user_string): bool

Сравнивает две строки на идентичность так, что значение параметра known_string нельзя раскрыть методами, основанными на знании времени исполнения функции.

Эту функцию можно применять для снижения риска атак по времени. Обычное сравнение через оператор === будет занимать разное время в зависимости от того, разные это значения или нет и в какой позиции первое отличие будет найдено, так раскрывается значение параметра known_string.

Предостережение

Внимание! Передавать полученную от пользователя строку необходимо во второй параметр, а не в первый.

Список параметров

known_string

Известная строка (string), которая должна держаться в секрете.

user_string

Пользовательская строка (string) для сравнения.

Возвращаемые значения

Возвращает true, если строки идентичны, и false, если нет.

Примеры

Пример #1 Пример использования hash_equals()

<?php
$secretKey
= '8uRhAeH89naXfFXKGOEj';

// Значение и подпись получены от пользователя, например, содержались в URL-адресе
// и были извлечены из глобальной переменной $_GET.
$value = 'username=rasmuslerdorf';
$signature = '8c35009d3b50caf7f5d2c1e031842e6b7823a1bb781d33c5237cd27b57b5f327';

if (
hash_equals(hash_hmac('sha256', $value, $secretKey), $signature)) {
echo
"Значение подписано правильно.", PHP_EOL;
} else {
echo
"Значение было подделано.", PHP_EOL;
}
?>

Результат выполнения приведённого примера:

Значение подписано правильно.

Примечания

Замечание:

Для успешного сравнения оба аргумента должны быть одной длины. Если переданы аргументы разной длины, то будет немедленно возвращено false и длина известной строки может быть определена в случае атаки по времени.

Смотрите также

  • hash_hmac() - Генерация хеш-кода на основе ключа, используя метод HMAC

add a note

User Contributed Notes

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