🛡️ 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

🛡️ CSP: Как запретить чужой JavaScript на вашем сайте | Сетка — социальная сеть от hh.ru