(PHP 5 >= 5.6.0, PHP 7, PHP 8)
hash_equals — Сравнение строк, нечувствительное к атакам по времени
$known_string
, string $user_string
): boolСравнивает две строки на идентичность, используя одинаковое время, вне зависимости, равны они или нет.
Эта функция может использоваться для предотвращения атак по времени; к примеру при проверке хешей паролей с помощью crypt().
known_string
Строка известной длины, с которой будет производиться сравнение.
user_string
Проверяемая строка.
Возвращает true
если строки идентичны и false
если нет.
Пример #1 Пример использования hash_equals()
<?php
$expected = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$correct = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$incorrect = crypt('apple', '$2a$07$usesomesillystringforsalt$');
var_dump(hash_equals($expected, $correct));
var_dump(hash_equals($expected, $incorrect));
?>
Результат выполнения данного примера:
bool(true) bool(false)
Замечание:
Оба аргумента должны быть одной длины. Если переданы аргументы разной длины, то будет немедленно возвращено
false
, и длина известной строки может быть определена в случае атаки по времени.
Замечание:
Крайне важно задавать строку с пользовательскими данными вторым аргументом, а не первым.