(PHP 5 >= 5.6.0, PHP 7)
hash_equals — Сравнение строк, нечувствительное к атакам по времени
$known_string
, string $user_string
) : boolСравнивает две строки на идентичность, используя одинаковое время, вне зависимости, равны они или нет.
Эта функция может использоваться для предотвращения атак по времени; к примеру при проверке хешей паролей с помощью crypt().
known_string
Строка известной длины, с которой будет производиться сравнение.
user_string
Проверяемая строка.
Возвращает TRUE
если строки идентичны и FALSE
если нет.
Выдает ошибку уровня E_WARNING
, если один из
параметров не является строкой.
Пример #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
, и длина известной строки может быть определена в случае атаки по времени.
Замечание:
Крайне важно задавать строку с пользовательскими данными вторым аргументом, а не первым.