Аудит CSP
Задание 1Введение
Цель: Разбирать и проверять Content-Security-Policy.
Напишите csp_problems(csp). Директивы разделены ;, внутри — имя и источники через пробел; повторная директива игнорируется. Проблемы: no-default-src — нет default-src; для script-src (или default-src, если её нет) — unsafe-inline, unsafe-eval, wildcard (источник *). Верните отсортированный список.
Задание 2Теория и инструменты
CSP ограничивает источники скриптов и стилей. 'unsafe-inline', 'unsafe-eval' и * почти полностью отключают защиту от XSS.
Если script-src не задана, для скриптов действует default-src.
Инструменты
- Python 3 или Node.js
- Встроенные тесты в редакторе
Больше теории — в разделе «Обучение: Защита (код)».
Задание 3Практика: напишите код
Примеры
csp_problems("default-src \u0027self\u0027")
→ []csp_problems("script-src \u0027self\u0027 \u0027unsafe-inline\u0027")
→ ["no-default-src", "unsafe-inline"]Ещё 5 скрытых тестов.
Пошаговый план — открывайте по одному шагу
- 1Разбейте политику по
;и запомните первую директиву с каждым именем. - 2Определите эффективный список источников для скриптов.
- 3Соберите проблемы и отсортируйте.
Подсказки — каждая до решения стоит −25 очков
Задание 4Как защититься
Используйте nonce или hash вместо unsafe-inline и проверяйте политику в CSP Evaluator.
Разборы участников
Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.