Выбор ответа Junior Безопасность веб-приложения обновлено
Открытый редирект
Вопрос
После входа код делает redirect(request.GET["next"]). В чём проблема?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Открытый редирект: ссылка с вашего домена уведёт на фишинговый сайт. Ссылка https://ваш-сайт/login?next=https://evil.example выглядит доверенной, а после ввода пароля уводит на поддельную страницу.
Варианты ответа
- Django запрещает редиректы после входа и выбросит
SuspiciousOperation - Параметр
nextвсегда пустой после POST-запроса формы входа - Открытый редирект: ссылка с вашего домена уведёт на фишинговый сайтправильный ответ
- Редирект работает только для 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 ошибок.