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

Аудит заголовков

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

Цель: Знать защитные HTTP-заголовки и проверять их автоматически.

Напишите функцию security_headers(headers). На вход — словарь/объект HTTP-заголовков ответа (имена в любом регистре). Верните список отсутствующих защитных заголовков в таком порядке: Content-Security-Policy, Strict-Transport-Security, X-Content-Type-Options, X-Frame-Options, Referrer-Policy.

X-Content-Type-Options считается отсутствующим, если его значение (без пробелов по краям, без учёта регистра) не равно nosniff. Пустое значение у остальных заголовков допустимо.

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

Content-Security-Policy ограничивает источники скриптов и защищает от XSS. Strict-Transport-Security заставляет браузер ходить только по HTTPS.

X-Content-Type-Options: nosniff запрещает браузеру угадывать тип файла, X-Frame-Options защищает от clickjacking, Referrer-Policy ограничивает утечку URL в заголовке Referer.

Имена HTTP-заголовков не чувствительны к регистру — это важно для проверки.

Инструменты

  • Python: dict, str.lower(), str.strip()
  • securityheaders.com — онлайн-проверка реальных сайтов

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

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

Примеры

Пример 1
security_headers({"Content-Security-Policy": "default-src \u0027self\u0027", "Referrer-Policy": "no-referrer", "Strict-Transport-Security": "max-age=31536000", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "DENY"})
→ []
Пример 2
security_headers({"content-type": "text/html", "server": "nginx"})
→ ["Content-Security-Policy", "Strict-Transport-Security", "X-Content-Type-Options", "X-Frame-Options", "Referrer-Policy"]

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

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

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

  1. 1
    Постройте словарь, где ключи приведены к нижнему регистру.

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

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

Настройте эти заголовки на веб-сервере (nginx add_header) или в фреймворке и проверяйте их в CI.

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

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