← Все комнаты Путь «Защита (код)» →
СреднийЗащита (код) Код Осенний CTF

Безопасный редирект

Прогресс комнаты 0 / 4
Задание 1Введение

Цель: Закрывать открытые редиректы.

Напишите is_safe_redirect(url) для параметра ?next=: разрешены только пути на своём сайте. True, если строка начинается с /, но не с //, не содержит \ и управляющих символов (коды < 32 и 127).

Задание 2Теория и инструменты

Открытый редирект — когда сайт перенаправляет на адрес из параметра без проверки. Фишинг выглядит как ссылка на доверенный сайт.

Браузеры считают //evil.com и /\evil.com ссылками на чужой хост.

Инструменты

  • Python 3 или Node.js
  • Встроенные тесты в редакторе

Больше теории — в разделе «Обучение: Защита (код)».

Задание 3Практика: напишите код

Примеры

Пример 1
is_safe_redirect("/profile")
→ true
Пример 2
is_safe_redirect("//evil.com")
→ false

Ещё 8 скрытых тестов.

solution
Ctrl+Enter — отправить Войдите, чтобы отправить

Пошаговый план — открывайте по одному шагу

  1. 1
    Разрешите только пути, начинающиеся с одного /.

Подсказки — каждая до решения стоит −25 очков

Задание 4Как защититься

Лучше всего — белый список путей или редирект по идентификатору вместо URL.

Разборы участников

Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.