Безопасный редирект
Задание 1Введение
Цель: Закрывать открытые редиректы.
Напишите is_safe_redirect(url) для параметра ?next=: разрешены только пути на своём сайте. True, если строка начинается с /, но не с //, не содержит \ и управляющих символов (коды < 32 и 127).
Задание 2Теория и инструменты
Открытый редирект — когда сайт перенаправляет на адрес из параметра без проверки. Фишинг выглядит как ссылка на доверенный сайт.
Браузеры считают //evil.com и /\evil.com ссылками на чужой хост.
Инструменты
- Python 3 или Node.js
- Встроенные тесты в редакторе
Больше теории — в разделе «Обучение: Защита (код)».
Задание 3Практика: напишите код
Примеры
is_safe_redirect("/profile")
→ trueis_safe_redirect("//evil.com")
→ falseЕщё 8 скрытых тестов.
Пошаговый план — открывайте по одному шагу
- 1Разрешите только пути, начинающиеся с одного
/. - 2Отклоните обратный слэш.
- 3Отклоните управляющие символы, чтобы не допустить внедрения заголовков.
Подсказки — каждая до решения стоит −25 очков
Задание 4Как защититься
Лучше всего — белый список путей или редирект по идентификатору вместо URL.
Разборы участников
Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.