hash_equals
(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
, и длина известной строки может быть определена в случае атаки по времени.
Замечание:
Крайне важно задавать строку с пользовательскими данными вторым аргументом, а не первым.