Content Security Policy (CSP) — стандарт безопасности для веб-разработчиков. CSP описывает политики, ограничивающие список источников, из которых можно загружать скрипты и элементы оформления при открытии сайта в браузере. Также с помощью CSP можно запретить использование незащищенного канала для загрузки таких элементов. Политики CSP задаются в коде сайта и позволяют снизить риск атак с внедрением стороннего кода, таких как межсайтовый скриптинг (XSS).
История CSP
Идею Content Security Policy разработал Роберт Хансен (Robert Hansen) в 2004 году. Документ назывался Content Restrictions и на тот момент нигде не применялся. Первым браузером с поддержкой Content Restrictions стал Firefox 4, выпущенный в 2011 году, а первая версия собственно стандарта CSP, Level 1, вышла в 2012-м под эгидой Консорциума Всемирной паутины (W3C). Актуальной версией на 2023 год является проект стандарта CSP Level 3, опубликованный в 2018 г.
CSP имеет статус рекомендации W3C. Стандарт поддерживают все основные браузеры. Firefox работает с актуальным синтаксисом CSP начиная с версии 23, Chrome — с версии 25, Safari — с версии 7. Браузеры, которые не поддерживают директивы CSP, игнорируют их и отображают в том числе запрещенный ими контент.
Как работают директивы CSP
Инструкции CSP задаются на стороне сайта. Для этого используется специальный HTTP-заголовок Content-Security-Policy или HTML-тег <meta>. HTTP-заголовки представляют собой набор метаданных, которыми обмениваются клиент (браузер) и сервер (сайт). Когда пользователь пытается открыть страницу сайта, тот отправляет браузеру информацию об этой странице, в том числе директивы CSP.
Директивы обозначают, из каких источников можно загружать элементы сайта. Например, директива CSP может разрешать браузеру загружать только те изображения, которые находятся на сервере сайта. Также CSP может разрешить или запретить загружать объекты по незащищенному протоколу HTTP; разрешить или запретить запускать плагины и так далее.
На стороне браузера директивы обрабатываются, после чего загружаются и выполняются только разрешенные элементы. Если на странице есть элементы, заблокированные инструкциями CSP, они просто не загрузятся. Пользователь не увидит никаких сообщений об ошибке.
Задачи CSP
Стандарт Content Security Policy направлен в первую очередь на борьбу с атаками, связанными со встраиванием стороннего кода на сайт. Инструкции могут защитить от такой вредоносной активности, как:
- Межсайтовый скриптинг (XSS) — внедрение стороннего кода на сайт или отдельную страницу сайта. CSP позволяет браузерам загружать скрипты только из доверенных источников, так что вредоносный код при открытии сайта не срабатывает.
- Кликджекинг — размещение прозрачного слоя с активными элементами поверх основного содержимого страницы. CSP позволяет заблокировать выполнение кода из недоверенных источников, а также скриптов, встроенных непосредственно в HTML-код страницы, поэтому в браузере пользователя прозрачный слой не загрузится.
Также с помощью CSP разработчики могут получать отчеты о заблокированных элементах. Это позволяет отслеживать вредоносную активность на сайте.
Стоит отметить, что CSP не дает стопроцентной гарантии защиты. Злоумышленники могут использовать для своих нужд легитимные источники скриптов, например сервис Google Analytics, который многие разработчики указывают в числе доверенных источников. Поэтому рекомендуется использовать CSP не вместо, а в сочетании с другими методами защиты от подобных атак.