Выбор ответа Junior Безопасность веб-приложения обновлено

Открытый редирект

Вопрос

После входа код делает redirect(request.GET["next"]). В чём проблема?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Открытый редирект: ссылка с вашего домена уведёт на фишинговый сайт. Ссылка https://ваш-сайт/login?next=https://evil.example выглядит доверенной, а после ввода пароля уводит на поддельную страницу.

Варианты ответа

  1. Django запрещает редиректы после входа и выбросит SuspiciousOperation
  2. Параметр next всегда пустой после POST-запроса формы входа
  3. Открытый редирект: ссылка с вашего домена уведёт на фишинговый сайтправильный ответ
  4. Редирект работает только для POST, а после входа браузер делает GET

Разбор

Ссылка https://ваш-сайт/login?next=https://evil.example выглядит доверенной, а после ввода пароля уводит на поддельную страницу. Проверяйте, что адрес относительный и ведёт на ваш хост: в Django url_has_allowed_host_and_scheme(url, allowed_hosts={request.get_host()}, require_https=True), иначе редирект на главную.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме