🛡️ CSP: Как запретить чужой JavaScript на вашем сайте
Кратко: CSP (Content Security Policy) — набор правил, который говорит браузеру: «Загружай только те ресурсы, что я разрешил, и не выполняй ничего, что я не одобрил». Если злоумышленник внедрит свой скрипт (XSS), браузер откажется его выполнять — его нет в белом списке. CSP — вторая линия обороны, спасающая, когда разработчик ошибся.
▫️ Как дошли до жизни такой CSP стал стандартом в 2010-х, когда XSS-атаки стали главной головной болью веба. Идея простая: почему браузер должен доверять всему на странице? Сегодня CSP поддерживается всеми современными браузерами.
▫️ Как устроен CSP передаётся через HTTP-заголовок Content-Security-Policy или тег . Главные директивы: · default-src — политика по умолчанию · script-src — разрешённые источники для JavaScript · style-src — разрешённые источники для CSS · img-src — разрешённые источники для картинок · frame-ancestors — кто может встраивать ваш сайт в iframe (защита от clickjacking)
▫️ Как запретить чужой скрипт Главная задача CSP — контроль выполнения JavaScript через script-src.
Белый список доменов: script-src 'self' https://trusted-cdn.com
Nonce («одноразовый номер») — современный способ. Сервер генерирует случайное значение для каждого запроса: script-src 'nonce-416d1177-4d12-4e3b-b7c9-f6c409789fb8' console.log('safe');
Чужой скрипт не знает nonce — браузер блокирует его.
Hash: хеш скрипта передаётся в заголовке: script-src 'sha256-OPc+f+...'
▫️ Что не так с unsafe-inline unsafe-inline разрешает любые inline-скрипты и обработчики событий — убивает защиту от XSS. unsafe-eval разрешает eval() — злоумышленник может использовать для обхода. unsafe-hashes разрешает скрипты в атрибутах по хешу — не рекомендуется, лучше переписать код.
▫️ Другие возможности · Защита от clickjacking: frame-ancestors запрещает открываться в чужих iframe. · Upgrade-insecure-requests: заменяет HTTP на HTTPS. · Trusted Types: запрещает передачу строк в innerHTML. · Sandbox: ограничивает возможности страницы.
▫️ Как внедрять без боли 1. Начните с Content-Security-Policy-Report-Only — браузер сообщает о нарушениях без блокировки. 2. Отслеживайте отчёты, добавляйте нужные источники. 3. Переключайтесь на блокировку.
▫️ Современное положение (2026) Строгие политики с nonce — отраслевой стандарт. Фреймворки (Blazor, React) требуют специфических настроек. Кэширование конфликтует с nonce (он должен меняться каждый раз), для статики используют хеши. Инструменты для WordPress помогают собирать политику автоматически.
Главный вывод: CSP — это дверь с консьержем. Он проверяет каждого входящего. Используйте nonce для скриптов, запретите unsafe-inline и настройте frame-ancestors, чтобы спать спокойно.
#csp #веббезопасность #xss #инфобез #penetrationtesting #owasp #contentsecuritypolicy