Как стать автором
Обновить

Улучшение сетевой безопасности с помощью Content Security Policy

Время на прочтение 7 мин
Количество просмотров 136K
Всего голосов 16: ↑15 и ↓1 +14
Комментарии 7

Комментарии 7

Пробовали внедрять на своих проектах. В итоге по статистике собранных отчетов мы помогали 0.5% пользователей (т.е. блокировали действительно вредоносные расширения) и мешали примерно 30% пользователей, т.е. в зависимости от браузера (особенно этим грешит Firefox) при заявленной поддержке данной технологии что-нибудь идет не так и JavaScript (особенно inline) перестает работать. На мобильных платформах вообще практически не поддерживается.
Посмотрел помимо facebook и twitter еще несколько крупных проектов — везде используются unsafe-unline, unsafe-eval.
Разве с такими директивами не получается защита чисто психологическая?
Сам внедрял — но только для админ-панели. В этом случае, даже если в каком-то браузере сломается — не сильно критично, безопасность важнее.
Есть проблема с шаблонизаторами, т.к в них приходится использовать eval так или иначе. Что бы обезопасить себя — вынес небезопасный код в webworker-песочницу с отдельной политикой безопасности(можно только исполнятся и ничего более, на выходе — строка с готовым шаблоном, доступ имеет только к минимально-необходимой части данных).

Столкнулся с проблемой в Firefox — он не понимает отдельную политику для WebWorker(как это делает, к примеру, Chrome). Хотя согласно спеке — должен. Кому интересно — сюда, особенно неплохо будет если за баг проголосуют что бы хоть какие-то подвижки были, а то у Firefox всё плохо с рассмотрением багов.

А так — CSP это путь в безопасное будущее веба, если будет работать согласно спецификации. Пока что, к сожалению — только простейшие случаи. А то unsafe-inline или unsafe-eval директивы ломают весь смысл использования CSP.
PS ведётся разработка CSP 3.0. Я вот например подметил что нет возможности задать nonce для веб-воркера, хотя для всех остальных скриптов это можно сделать.
Спасибо за статью. Как раз сейчас заинтересовался этим вопросом
Всегда рады :)
Отключить scp-report можно так:
находим конфиг nginx и комментируем строчку # add_header Content-Security-Policy-Report-Only «default-src https:; script-src https: unsafe-eval unsafe-inline; style-src https: unsafe-inline; img-src https: dat a:; font-src https: dat a:; report-uri /csp-report»;
В BitrixVM это тут: /etc/nginx/bx/site_avaliable/bx_ext_ssl_сайт.ru.conf
Nonce в firefox 78 не отрабатывает.
caniuse.com/#search=Nonce
По этому хрому и Safari отдаю одни заголовки (с Nonce ), другим разрешаю unsafe-inline.
Причем Nonce генерируется «в html кеше»
Зарегистрируйтесь на Хабре , чтобы оставить комментарий