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

Белый список CORS

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

Цель: Правильно проверять Origin для CORS.

Напишите cors_allowed(origin, allowlist). Origin — scheme://host[:port]. Запись списка такая же, хост может начинаться с *. — тогда подходят поддомены любой глубины, но не сам домен. Схема и порт (отсутствие порта — отдельное значение) должны совпадать точно, хост — без учёта регистра.

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

Ошибки CORS дают чужим сайтам читать ответы API с cookie пользователя. Частая ошибка — проверка через endswith('example.com').

Origin может быть null (sandbox iframe, file://), его нельзя разрешать.

Инструменты

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

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

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

Примеры

Пример 1
cors_allowed("https://app.example.com", ["https://*.example.com"])
→ true
Пример 2
cors_allowed("https://example.com", ["https://*.example.com"])
→ false

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

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

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

  1. 1
    Разберите origin на схему, хост и порт.

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

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

Никогда не отражайте Origin в Access-Control-Allow-Origin без проверки, особенно вместе с Allow-Credentials.

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

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