💡 Инструкция: Выберите один ответ из пяти. Для каждого секрета определите срок жизни, способ хранения и последствия утечки. Таймер — 85 минут.
Вопрос 10 из 30
Какой порядок корректен?
PHP Копировать
if($user && password_verify($password,$user->hash)){
session_regenerate_id(true);
$_SESSION['uid']=$user->id;
if(password_needs_rehash($user->hash,PASSWORD_DEFAULT)) $repo->rehash($user->id,password_hash($password,PASSWORD_DEFAULT));
}
Проверить статус аккаунта до поиска пользователя, а rehash выполнить до verify
Найти пользователя, verify, проверить статус, regenerate session ID, при нужде rehash
Сравнить строку хеша оператором ===, затем вызвать password_verify для журнала
Сделать rehash каждого сохранённого пароля при запуске приложения без входа пользователя
Сначала создать сессию, затем проверить пароль и только после этого искать пользователя
Вопрос 21 из 30
Какие пароли нужны в тесте?
PHP Копировать
$cases = [
'correct' => ['correct horse', true],
'wrong' => ['wrong', false],
'empty' => ['', false],
'unicode' => ['пароль🔐', true],
'long' => [str_repeat('a', 200), false],
];
Пустое значение и null, не проверяя длинные строки и Unicode
Реальный пароль администратора в закрытом наборе интеграционных тестов
Только случайный хеш без известного исходного значения
Верный, неверный, пустой, длинный и Unicode — без реальных пользовательских секретов
Только один популярный пароль, чтобы тест не зависел от кодировки
Вопрос 22 из 30
Что проверять при rehash?
PHP Копировать
$oldHash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 10]);
assert(password_verify($password, $oldHash));
assert(password_needs_rehash($oldHash, PASSWORD_BCRYPT, ['cost' => 12]));
$newHash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
assert(password_verify($password, $newHash));
Проверить лишь изменение длины строки хеша после password_hash
Убедиться, что новый хеш совпадает с паролем при сравнении оператором ===
Старый хеш проходит verify, needs_rehash true, новый проходит verify и больше не требует обновления
Сравнить соли старого и нового хеша: они должны быть одинаковыми
Проверить только password_needs_rehash, не выполняя verify до и после обновления