Ответ вслух Senior XSS и CSP обновлено

Кейс: внедрить CSP в большое приложение

Вопрос

В большом приложении с инлайновыми скриптами, сторонними виджетами и аналитикой нужно включить CSP. Как вы это сделаете?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Начинаю с инвентаризации: какие скрипты грузятся, где инлайн, где onclick в разметке, кто использует eval. Включаю политику в режиме Report-Only и собираю отчёты пару недель.

Что должно прозвучать в ответе

  • Инвентаризация: какие скрипты, инлайн, сторонние домены, 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 ошибок.