Белый список CORS
Задание 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Практика: напишите код
Примеры
cors_allowed("https://app.example.com", ["https://*.example.com"])
→ truecors_allowed("https://example.com", ["https://*.example.com"])
→ falseЕщё 7 скрытых тестов.
Пошаговый план — открывайте по одному шагу
- 1Разберите origin на схему, хост и порт.
- 2Для каждой записи сравните схему и порт точно.
- 3Хост: точное совпадение или поддомен через
.для записей с*..
Подсказки — каждая до решения стоит −50 очков
Задание 4Как защититься
Никогда не отражайте Origin в Access-Control-Allow-Origin без проверки, особенно вместе с Allow-Credentials.
Разборы участников
Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.