CSP — политика защиты контента
Content Security Policy (CSP, политика защиты контента) — это механизм обеспечения безопасности, с помощью которого можно защищаться от атак с внедрением контента, например, межсайтового скриптинга (XSS, cross site scripting) и встроенной в приложения для браузеров рекламы, по которым кликают юзеры. Все эти переходы в большинстве происходят по рекламе которую пользователь видит на ваших сайтах. Как стало всем известно, видит он её потому что приложения браузера были заражены вирусом и вместо вашей белой реклы он видит подменную рекламу мошенников, которая конечно ведет на мутные сайты.
CSP описывает безопасные источники загрузки ресурсов, устанавливает правила использования встроенных стилей, скриптов, а также динамической оценки JavaScript — например, с помощью eval. Загрузка с ресурсов, не входящих в «белый список», блокируется.
Для использования политики страница должна содержать HTTP-заголовок Content-Security-Policy с одной и более директивами, которые представляют собой «белые списки». Директивы заголовка CSP:
- default-src — в этой директиве задаются белые списки хостов, которые будут автоматически присвоены не заданным директивам
- script-src — белый список хостов с которых разрешается загрузка javascript
- object-src — белый список хостов с которых разрешается загрузка Flash-подобных плагинов
- style-src — белый список хостов с которых разрешается загрузка css
- img-src — белый список хостов с которых разрешается загрузка картинок
- media-src — белый список хостов с которых разрешается загрузка аудио и видео
- frame-src — белый список хостов с которых разрешается загрузка iframe’ов
- font-src — белый список хостов с которых разрешается загрузка шрифтов
- connect-src — специальные директивы для XMLHttpRequest, WebSocket и EventSource. Обратите внимание, что для каждой из этих директив задаётся список не урлов, а хостов, с которыми разрешено общаться браузеру
- report-uri Url, на который будет отсылаться JSON-отчёт о нарушениях политики (опционален, его можно и не размещать)
Ключевые слова для указания хостов (задаются в кавычках):
- ‘self’ — определяет текущий хост
- ‘none’ — запрещает всё
- ‘unsafe-inline’ — используется только в директивах script-src и style-src. Разрешает выполнять inline-скрипты на странице. Не рекомендую использвать это ключевое слово, т.к. это развязывает руки злоумышленнику и даёт право исполнять любые инлайновые скрипты на странице — это дыра в безопасности
- ‘unsafe-eval’ Используется только в script-src и разрешает кодогенерацию, например: eval, new Function, setTimeout(‘var foo = «bar» ‘, 7)
Основной код политики защиты контента, который размещается в файле htaccess, следующий:
#Header set Content-Security-Policy-Report-Only <IfModule mod_headers.c> Header set Content-Security-Policy " " </IfModule>
Пример CSP кода для соцсетей, поисковых систем, партнерок Яндекса и Гугль:
<ifModule mod_headers.c> Header set Content-Security-Policy "\ default-src 'self';\ connect-src 'self' *.google-analytics.com https://*.google-analytics.com *.googlevideo.com https://*.googlevideo.com google-analytics.com https://google-analytics.com youtube.com https://youtube.com ytimg.com https://ytimg.com *.yandex.ru https://*.yandex.ru *.youtube.com https://*.youtube.com *.ytimg.com https://*.ytimg.com;\ font-src 'self' *.googleapis.com https://*.googleapis.com *.gstatic.com https://*.gstatic.com;\ frame-src 'self' *.doubleclick.net https://*.doubleclick.net *.googleadservices.com https://*.googleadservices.com *.googlesyndication.com https://*.googlesyndication.com rutube.ru https://rutube.ru vk.com https://vk.com yandexadexchange.net https://yandexadexchange.net youtube.com https://youtube.com ytimg.com https://ytimg.com *.vimeo.com https://*.vimeo.com *.vk.com https://*.vk.com *.yandex.ru https://*.yandex.ru *.youtube-nocookie.com https://*.youtube-nocookie.com *.youtube.com https://*.youtube.com *.ytimg.com https://*.ytimg.com;\ img-src 'self' *.2mdn.net https://*.2mdn.net *.doubleclick.net https://*.doubleclick.net *.google-analytics.com https://*.google-analytics.com *.googleapis.com https://*.googleapis.com *.googlesyndication.com https://*.googlesyndication.com *.gstatic.com https://*.gstatic.com google-analytics.com https://google-analytics.com vk.com https://vk.com yadro.ru https://yadro.ru *.rambler.ru https://*.rambler.ru *.vk.com https://*.vk.com *.yadro.ru https://*.yadro.ru *.yandex.net https://*.yandex.net *.yandex.ru https://*.yandex.ru *.youtube.com https://*.youtube.com *.ytimg.com https://*.ytimg.com;\ object-src 'self' *.2mdn.net https://*.2mdn.net *.doubleclick.net https://*.doubleclick.net *.ggpht.com https://*.ggpht.com *.googlesyndication.com https://*.googlesyndication.com *.googlevideo.com https://*.googlevideo.com *.gstatic.com https://*.gstatic.com youtube.com https://youtube.com ytimg.com https://ytimg.com *.yandex.ru https://*.yandex.ru *.youtube.com https://*.youtube.com *.ytimg.com https://*.ytimg.com;\ script-src 'self' 'unsafe-eval' 'unsafe-inline' *.2mdn.net https://*.2mdn.net *.doubleclick.net https://*.doubleclick.net *.google-analytics.com https://*.google-analytics.com *.googlesyndication.com https://*.googlesyndication.com *.gstatic.com https://*.gstatic.com google-analytics.com https://google-analytics.com vk.com https://vk.com yadro.ru https://yadro.ru yandex.net https://yandex.net yandex.st https://yandex.st *.rambler.ru https://*.rambler.ru *.vk.com https://*.vk.com *.yadro.ru https://*.yadro.ru *.yandex.net https://*.yandex.net *.yandex.ru https://*.yandex.ru;\ style-src 'self' 'unsafe-inline' *.googleapis.com https://*.googleapis.com *.gstatic.com https://*.gstatic.com;\" </IfModule>
Другой пример для партнерки DirectAdvert:
#Header set Content-Security-Policy-Report-Only <ifModule mod_headers.c> Header set Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval' https://*.vimeo.com https://tg.directadvert.ru https://directadvert.ru http://tg.directadvert.ru http://directadvert.ru *.directadvert.ru https://*.directadvert.ru http://*.directadvert.ru *.facebook.com https://*.facebook.com *.facebook.net *.tynt.com *.yandex.net https://site.yandex.net https://yastatic.net yastatic.net an.yandex.ru awaps.yandex.ru vk.com https://vk.com mc.yandex.ru clck.yandex.ru yandex.st https://*.googleapis.com https://*.google.com *.google.com *.gstatic.com https://*.gstatic.com www.google-analytics.com https://www.google-analytics.com *.googlesyndication.com https://*.googlesyndication.com *.googleapis.com *.doubleclick.net;object-src 'self' https://*.googleapis.com www.youtube.com https://www.youtube.com *.gstatic.com; frame-src 'self' *.facebook.com https://*.facebook.com bcp.crwdcntrl.net yastatic.net awaps.yandex.ru vk.com https://vk.com https://login.vk.com yandex.st www.youtube.com https://www.youtube.com *.googlesyndication.com *.doubleclick.net https://*.doubleclick.net https://*.google.com *.google.com mc.yandex.ru www.youtube.com; connect-src 'self' mc.yandex.ru www.google-analytics.com https://www.google-analytics.com;" </IfModule>
Для счетчиков Xtrastats и кнопок социальных сетей Addtoany:
<ifModule mod_headers.c> Header set Content-Security-Policy "\ default-src 'self';\ connect-src 'self' http://xtrastats.com http://*.xtrastats.com *.xtrastats.com xtrastats.com static.addtoany.com https://static.addtoany.com addtoany.com *.addtoany.com https://*.addtoany.com *.google-analytics.com https://*.google-analytics.com *.googlevideo.com https://*.googlevideo.com google-analytics.com https://google-analytics.com youtube.com https://youtube.com ytimg.com https://ytimg.com *.yandex.ru https://*.yandex.ru *.youtube.com https://*.youtube.com *.ytimg.com https://*.ytimg.com;\ font-src 'self' http://xtrastats.com http://*.xtrastats.com *.xtrastats.com xtrastats.com static.addtoany.com https://static.addtoany.com addtoany.com *.addtoany.com https://*.addtoany.com *.googleapis.com https://*.googleapis.com *.gstatic.com https://*.gstatic.com;\ frame-src 'self' https://www.google.com/recaptcha/ http://xtrastats.com http://*.xtrastats.com *.xtrastats.com xtrastats.com https://static.addtoany.com/menu/page.js static.addtoany.com https://static.addtoany.com addtoany.com *.addtoany.com https://*.addtoany.com *.doubleclick.net https://*.doubleclick.net *.googleadservices.com https://*.googleadservices.com *.googlesyndication.com https://*.googlesyndication.com rutube.ru https://rutube.ru vk.com https://vk.com yandexadexchange.net https://yandexadexchange.net youtube.com https://youtube.com ytimg.com https://ytimg.com *.vimeo.com https://*.vimeo.com *.vk.com https://*.vk.com *.yandex.ru https://*.yandex.ru *.youtube-nocookie.com https://*.youtube-nocookie.com *.youtube.com https://*.youtube.com *.ytimg.com https://*.ytimg.com;\ img-src 'self' http://xtrastats.com http://*.xtrastats.com *.xtrastats.com xtrastats.com https://static.addtoany.com/menu/page.js static.addtoany.com https://static.addtoany.com addtoany.com *.addtoany.com https://*.addtoany.com *.2mdn.net https://*.2mdn.net *.doubleclick.net https://*.doubleclick.net *.google-analytics.com https://*.google-analytics.com *.googleapis.com https://*.googleapis.com *.googlesyndication.com https://*.googlesyndication.com *.gstatic.com https://*.gstatic.com google-analytics.com https://google-analytics.com vk.com https://vk.com yadro.ru https://yadro.ru *.rambler.ru https://*.rambler.ru *.vk.com https://*.vk.com *.yadro.ru https://*.yadro.ru *.yandex.net https://*.yandex.net *.yandex.ru https://*.yandex.ru *.youtube.com https://*.youtube.com *.ytimg.com https://*.ytimg.com;\ object-src 'self' http://xtrastats.com http://*.xtrastats.com *.xtrastats.com xtrastats.com static.addtoany.com https://static.addtoany.com addtoany.com *.addtoany.com https://*.addtoany.com *.2mdn.net https://*.2mdn.net *.doubleclick.net https://*.doubleclick.net *.ggpht.com https://*.ggpht.com *.googlesyndication.com https://*.googlesyndication.com *.googlevideo.com https://*.googlevideo.com *.gstatic.com https://*.gstatic.com youtube.com https://youtube.com ytimg.com https://ytimg.com *.yandex.ru https://*.yandex.ru *.youtube.com https://*.youtube.com *.ytimg.com https://*.ytimg.com;\ script-src 'self' 'unsafe-eval' 'unsafe-inline' https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/ http://xtrastats.com http://*.xtrastats.com *.xtrastats.com xtrastats.com static.addtoany.com https://static.addtoany.com addtoany.com *.addtoany.com https://*.addtoany.com *.2mdn.net https://*.2mdn.net *.doubleclick.net https://*.doubleclick.net *.google-analytics.com https://*.google-analytics.com *.googlesyndication.com https://*.googlesyndication.com *.gstatic.com https://*.gstatic.com google-analytics.com https://google-analytics.com vk.com https://vk.com yadro.ru https://yadro.ru yandex.net https://yandex.net yandex.st https://yandex.st *.rambler.ru https://*.rambler.ru *.vk.com https://*.vk.com *.yadro.ru https://*.yadro.ru *.yandex.net https://*.yandex.net *.yandex.ru https://*.yandex.ru;\ style-src 'self' 'unsafe-inline' http://xtrastats.com http://*.xtrastats.com *.xtrastats.com xtrastats.com static.addtoany.com https://static.addtoany.com addtoany.com *.addtoany.com https://*.addtoany.com *.googleapis.com https://*.googleapis.com *.gstatic.com https://*.gstatic.com;\" </IfModule>
