Кейс: внедрить CSP в большое приложение
Вопрос
В большом приложении с инлайновыми скриптами, сторонними виджетами и аналитикой нужно включить CSP. Как вы это сделаете?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Инвентаризация: какие скрипты, инлайн, сторонние домены, eval
Начать с Report-Only и сбора отчётов о нарушениях
Переход на nonce: генерация на каждый ответ, вынос обработчиков из атрибутов
strict-dynamic для зависимостей, object-src и base-uri none
Поэтапное включение блокировки, мониторинг отчётов и регресса
Договориться о правилах: новые инлайны и eval не принимаются
Что могут спросить следом
- Что делать со сторонним виджетом, который требует unsafe-eval?
- Как nonce сочетается с кешированием страниц на CDN?
Разбор
Образцовый ответ: «Начинаю с инвентаризации: какие скрипты грузятся, где инлайн, где onclick в разметке, кто использует eval. Включаю политику в режиме Report-Only и собираю отчёты пару недель. Параллельно перевожу на nonce: сервер генерирует случайное значение на каждый ответ и ставит его в <script nonce>, обработчики из атрибутов переношу в JS. Политика: nonce, strict-dynamic, object-src none, base-uri none. Включаю блокировку по разделам, начиная с самых чувствительных страниц, слежу за отчётами. Виджету с unsafe-eval выделяю отдельный iframe на другом домене. Для страниц из CDN-кеша nonce не подходит, там использую хеши скриптов. И фиксирую правило в ревью и линтере: новые инлайны не принимаем».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.