Существует множество способов усилить безопасность на вашем сайте WordPress. Установление строгой политики безопасности контента — это один из методов, который не следует упускать из виду.
Внедрение CSP может значительно снизить риск межсайтового скриптинга (XSS) и других атак, которые могут нанести вред вашему сайту и его посетителям. Контролируя, какие ресурсы разрешено загружать браузеру, вы можете предотвратить использование уязвимостей злоумышленниками.
Если вы не уверены, что такое политика безопасности контента WordPress и как ее настроить, это руководство поможет вам. Мы объясним все, что вам нужно знать о CSP и нескольких способах их реализации.
- Что такое заголовки безопасности HTTP WordPress?
- Что такое Политика безопасности контента (CSP)?
- Что такое заголовок политики безопасности контента?
- Зачем вашему сайту нужен CSP
- Межсайтовый скриптинг (XSS)
- Атаки с использованием инъекций данных
- Атаки с перехватом пакетов
- Clickjacking
- Атаки на включение файлов
- Как создать политику безопасности контента
- Шаг 1. Определите ресурсы вашего сайта
- Шаг 2. Определите директивы CSP
- Шаг 3. Добавьте политику безопасности контента в WordPress
- Используйте мета-теги для добавления CSP
- Добавьте CSP с помощью Apache
- Добавьте CSP с помощью Nginx
- Используйте плагин для добавления политики безопасности контента
- Протестируйте свою политику безопасности контента
- Проблемы политики безопасности контента и способы их устранения
- Встроенные скрипты и стили
- Конфликты с другими плагинами
- Нарушенная функциональность веб-сайта
- Неправильный синтаксис заголовка
- Отсутствие поддержки браузера
- Проблемы с производительностью
- Проблемы со смешанным контентом HTTPS
- CSP для WordPress является частью более масштабной стратегии
Что такое заголовки безопасности HTTP WordPress?
Прежде чем мы объясним политику безопасности контента, вам необходимо разобраться в WordPress заголовки безопасности HTTP. Эти заголовки сообщают браузеру, как вести себя при обработке содержимого вашего сайта WordPress. И они добавляют дополнительный уровень безопасности, блокируя использование уязвимостей.
Существует несколько типов заголовков безопасности HTTP.
- Строгая транспортная безопасность HTTP (HSTS): заставляет браузер использовать безопасное HTTPS-соединение. Вы больше не сможете использовать HTTP-соединения в качестве запасного варианта. Но это предотвращает атаки с удалением SSL, которые перенаправляют пользователей на небезопасную версию вашего веб-сайта.
- X-Content-Type-Options: запрещает браузеру MIME-перехват типа содержимого файла. MIME-перехват — это когда браузеры пытаются определить тип файла (изображение, текст, HTML, исполняемый файл и т.д.) На основе его содержимого. Но некоторые злоумышленники манипулируют этим, чтобы выполнить вредоносный код, встроенный в, казалось бы, безобидные файлы.
- X-Frame-Опции: Обеспечивает защиту от взлома кликов, предотвращая отображение страницы во фрейме или iframe. Некоторые вредоносные веб-сайты используют iframes для встраивания содержимого вашего веб-сайта. Затем они обманом заставляют пользователей нажимать на что-то нежелательное.
- X-XSS-защита: Эта защита устарела и теперь встроена в большинство современных браузеров. Она обнаруживает атаки с использованием межсайтовых скриптов и предотвращает их выполнение.
И, наконец, есть Политика безопасности контента, еще один тип заголовка безопасности HTTP.
Что такое Политика безопасности контента (CSP)?
В то время как общие заголовки HTTP решают множество различных проблем безопасности, Политика безопасности контента фокусируется на защите сайта от уязвимостей, основанных на контенте, включая внедрение данных и атаки с использованием межсайтовых скриптов.
CSP ориентирован исключительно на указание того, какие динамические ресурсы разрешено загружать и запускать на веб-странице. Он может указывать, какие скрипты могут выполняться, какие домены могут использоваться для источников изображений и ограничений на определенные функции CSS.
CSP для WordPress — это очень мощный способ контролировать, откуда может поступать контент на ваш сайт. Он также определяет, какие скрипты разрешено выполнять. XSS и атаки с внедрением кода с трудом обходят эти политики.
Занося в белый список только определенные источники, использующие заголовки безопасности WordPress, вы блокируете выполнение неизвестных скриптов и контента.
Что такое заголовок политики безопасности контента?
Заголовок политики безопасности контента — это заголовок ответа HTTP, который помогает повысить безопасность веб-сайта. Любой может добавить заголовки безопасности HTTP на свой веб-сайт и определить различные директивы для управления различными типами ресурсов, такими как CSS или JavaScript. Эти директивы могут быть адаптированы к вашей индивидуальной среде. Таким образом, это полезный и универсальный способ устранения уязвимостей, связанных с контентом.
Зачем вашему сайту нужен CSP
Когда дело доходит до обеспечения безопасности вашего веб-сайта, лучше всего действовать на опережение. Вы бы предпочли потратить часы или дни на очистку веб-сайта, зараженного вредоносным ПО, или остановить атаки до того, как они смогут причинить какой-либо вред?
Реализация политики безопасности контента — отличный способ остановить потенциальные эксплойты на их пути. И существует довольно много эксплойтов, от которых CSP может помочь защитить. Давайте рассмотрим некоторые из них.
Межсайтовый скриптинг (XSS)
Межсайтовый скриптинг — одна из наиболее распространенных уязвимостей в системе безопасности в Интернете, и сайты WordPress не являются исключением. XSS-атаки происходят, когда злоумышленники внедряют вредоносные скрипты на ваши веб-страницы.
Результаты могут быть разрушительными. «Кража файлов cookie» позволяет злоумышленникам перехватывать сеансы пользователей, потенциально предоставляя им доступ администратора. Другие уязвимости позволяют им искажать ваш веб-сайт и заполнять его вредоносными программами и спам-ссылками.
CSP эффективно снижает риск XSS-атак, указывая, из каких источников браузеру разрешено загружать скрипты. Могут выполняться только скрипты из надежных источников, а все остальные будут заблокированы. Ваш CSP также может блокировать встроенные скрипты и HTML-атрибуты, обрабатывающие события, которые являются обычными векторами для выполнения XSS-атак.
Это не является надежной защитой, особенно когда у вас много плагинов, добавляющих больше потенциальных уязвимостей сценариев, но CSP заблокирует большинство попыток XSS.
Атаки с использованием инъекций данных
Атаки с использованием инъекций данных происходят, когда злоумышленник вставляет вредоносные данные на ваш веб-сайт, обычно используя небезопасную проверку ввода, такую как отправка форм. Многие пользователи WordPress, которые устанавливают плагины формы без надлежащей очистки ввода, к сожалению, знакомы с атаками с использованием кода-инъекции.
Успешная атака с использованием инъекций данных может привести к манипулированию вашей базой данных, перенаправлению пользователей на вредоносные веб-сайты или отображению спама на вашем веб-сайте. Внедрение SQL и подделка форм — два распространенных проявления атаки с использованием данных.
Ваша политика безопасности контента защищает от этого, контролируя, какие данные могут быть загружены и выполнены, поэтому вводимые пользователем данные или скомпрометированные сторонние ресурсы не смогут нанести вред вашему сайту.
Поскольку веб-сайты WordPress полны динамического контента и источников пользовательского ввода, они особенно уязвимы для такого рода атак. Для их смягчения необходим CSP.
Атаки с перехватом пакетов
Атака с отслеживанием упаковки предполагает, что злоумышленники перехватывают пакеты данных по мере их перемещения по сети. Это может привести к раскрытию конфиденциальной информации, такой как пароли, токены сеанса или номера кредитных карт – и если ваш сайт не применяет протокол HTTPS, эти данные передаются обычным текстом, а не в зашифрованном виде.
В рамках вашей политики безопасности контента можно обеспечить соблюдение безопасных подключений с помощью одной из ее директив. Обновление этих небезопасных HTTP-запросов до HTTPS гарантирует, что все данные, передаваемые на ваш веб-сайт и с него, будут зашифрованы. Даже если злоумышленники получат конфиденциальную информацию, она будет зашифрована. Тогда для них это бесполезно.
CSP лишь косвенно помогает при атаках с перехватом пакетов. Это не предотвращает их. Скорее, это просто снижает воздействие.
Clickjacking
Clickjacking — это когда злоумышленники обманом заставляют пользователей нажимать на то, чего они не хотели. Обычно что-то скрыто поверх другого веб-элемента ((https://owasp.org/www-community/attacks/Clickjacking)). Последствия этого варьируются от простого лайкания публикации в социальной сети до включения веб-камеры. Это также может предоставить доступ к конфиденциальной информации или перенаправить на другой веб-сайт.
Например, пользователи могут пытаться нажать кнопку на веб-сайте, не понимая, что прозрачный iframe находится поверх того, что кажется безобидным веб-элементом. Когда вы нажимаете на этот iframe, вы перенаправляетесь на вредоносный веб-сайт.
CSP борется с кликджекингом с помощью директивы, которая запрещает другим доменам встраивать содержимое вашего сайта в iframes. Ни один другой веб-сайт не сможет размещать ваш контент без разрешения, что не позволит злоумышленникам вводить пользователей в заблуждение.
Это аналогичная, но более мощная версия того, что может делать старый HTTP-заголовок X-Frame-Options.
Атаки на включение файлов
При атаке на включение файлов злоумышленники используют уязвимости в веб-приложении для выполнения вредоносного кода. В WordPress эти атаки обычно используют плохо защищенные файлы плагинов или тем. Это позволяет злоумышленникам внедрять PHP-код на ваш сервер или запускать вредоносные скрипты в браузерах ваших пользователей. Это становится особенно простым, если вы не выполняли никаких проверок безопасности PHP-кода.
Внедрение CSP может значительно снизить риск некоторых типов атак на включение файлов. Определяя строгие политики, ограничивающие загрузку и выполнение скриптов на вашем сайте, даже если злоумышленнику удастся внедрить вредоносный файл, браузер заблокирует его запуск.
Как создать политику безопасности контента
Теперь, когда вы знаете, почему CSP является такой важной частью плана безопасности любого веб-сайта, вам, вероятно, интересно, как вы можете добавить его в WordPress.
Это следует делать, только если вы знакомы с серверной частью WordPress и обладаете хотя бы некоторыми техническими знаниями. Также часто требуется устранение неполадок, поэтому время и терпение помогут вам справиться с этим.
Для развертывания CSP потребуется несколько шагов, начиная с определения источников скриптов на вашем веб-сайте, определения директив и добавления политики в WordPress.
Шаг 1. Определите ресурсы вашего сайта
Прежде всего, вам необходимо определить и каталогизировать все внешние ресурсы, на которые опирается ваш сайт. Сюда входят скрипты, таблицы стилей, изображения, шрифты, медиафайлы и фреймы.
Чтобы создать CSP, который не настолько строг, чтобы блокировать материалы, необходимые для функционирования вашего веб-сайта, например, основной шрифт или таблицу стилей CSS, вам нужно выяснить, откуда загружаются эти ресурсы.
Один из способов сделать это — использовать встроенные инструменты разработчика вашего браузера. Во всех Chrome, Firefox и Edge есть подобные инструменты.
- Перейдите на свой веб-сайт. Щелкните страницу правой кнопкой мыши и выберите Проверить. Или попробуйте нажать F12 или Ctrl+Shift+I на клавиатуре. Откроется меню разработчика.
2. Перейдите на вкладку Сеть. Обновите страницу и наблюдайте, как она заполняется новыми записями.
3. Обратите внимание на скрипты, изображения, таблицы стилей и так далее, которые использует ваш сайт, и создайте список «безопасных источников», которые необходимо внести в белый список. Проверьте, нет ли внешних библиотек или ресурсов, которые вы можете загружать из сторонних сервисов, таких как Google Fonts, CDNS или analytics.
Вы также можете вручную проверить HTML вашего сайта на наличие таких тегов, как <script>, <link> и <iframe>, а также любых источников внутри. Простой способ сделать это — щелкнуть страницу правой кнопкой мыши и выбрать Просмотреть исходный код страницы.
Или вы можете использовать генератор политики безопасности контента, который соберет данные с вашего сайта и выведет соответствующий CSP на основе внешних скриптов, используемых на вашем сайте.
Шаг 2. Определите директивы CSP
Как только у вас будет четкое представление о ресурсах вашего сайта, следующим шагом в разработке вашего CSP будет определение соответствующих директив. Это фактический набор инструкций, которые сообщают браузеру, как обрабатывать внутренние и внешние ресурсы на вашем веб-сайте.
Вот некоторые из наиболее часто используемых директив CSP:
- default-src: это резервная директива. Если никакая другая директива не применима, используется default-src.
- script-src: Определяет допустимые источники для JavaScript. Сюда входят не только URL-адреса, с которых могут быть загружены скрипты, но и такие опции, как ‘unsafe-inline’, которые разрешают встроенные скрипты.
- style-src: указывает допустимые источники для таблиц стилей. Подобно script-src, это может включать определенные URL-адреса, а также ‘unsafe-inline’ для разрешения встроенных стилей.
- img-src: управляет тем, откуда можно загружать изображения.
- connect-src: определяет разрешенные источники для подключений XMLHttpRequest, WebSocket и EventSource.
- font-src: определяет, из каких источников могут использоваться шрифты.
- frame-src: указывает допустимые источники для создания фреймов (iframes). Это важно для предотвращения атак с использованием клик-джекинга.
- uri отчета/report-to: URI, куда будут отправляться отчеты в случае нарушения CSP.
Справочник по политике безопасности контента — отличный источник информации обо всех директивах CSP и о том, как их использовать.
Вам также необходимо знать, как настроить эти ссылки. Вот несколько распространенных источников.
- none: Никакие ресурсы не будут загружены, даже с вашего собственного веб-сайта.
- self: будут загружаться только ресурсы с вашего собственного веб-сайта.
- example.com: Разрешить загрузку ресурсов из определенного домена. Вы также можете указать поддомены или использовать подстановочный знак (*.example.com разрешит загрузку с любого поддомена на example.com).
- https: загружайте ресурсы HTTPS только из любого разрешенного домена.
Директива CSP, которая загружает только скрипты с вашего веб-сайта и API Google, будет выглядеть следующим образом:
script-src 'self' https://apis.google.com;
При определении ваших директив будьте как можно более конкретны, чтобы ограничить потенциальные векторы атак, но убедитесь, что вы не нарушите работу вашего веб-сайта, будучи слишком строгими. К счастью, если вы все-таки допустили ошибку в своем CSP, легко выполнить откат и попробовать снова.
Шаг 3. Добавьте политику безопасности контента в WordPress
После того, как вы настроили CSP, пришло время интегрировать его на свой веб-сайт WordPress. Есть несколько способов сделать это, некоторые из них проще других. Вот разбивка наиболее распространенных подходов.
Используйте мета-теги для добавления CSP
Если вы планируете реализовать простую политику или просто хотите протестировать CSP, вы можете использовать мета-теги. Это самый простой способ сделать это, но имеет некоторые ограничения. Например, некоторые директивы (report-uri) не будут работать, и это, возможно, не повлияет на внешние скрипты, обрабатываемые вашим сервером.
- Откройте редактор тем через Инструменты> Редактор файлов тем (или Внешний вид> Редактор файлов тем) на панели управления WordPress.
2. Найдите header.php файл для вашей темы. Если в вашей теме его не хватает, вы можете вместо этого использовать плагин типа Insert headers & footers.
3. Вставьте подобный мета-тег в раздел <head>:
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src ‘self’ https://example.com; script-src 'self';">
Замените приведенный выше пример своей собственной политикой.
Добавьте CSP с помощью Apache
Если ваш сайт WordPress работает на сервере Apache, вы можете добавить свой CSP непосредственно в свой файл.htaccess. Этот метод применяет CSP для всего сайта, что более безопасно, чем использование мета-тегов.
Это можно сделать двумя способами: вы можете либо загрузить FTP-клиент, такой как FileZilla, для доступа к вашему веб-сайту, и искать.htaccess в каталоге верхнего уровня. Или вы можете войти в cPanel вашего веб-хостинга (или эквивалент).
- Войдите в cPanel и нажмите Файловый менеджер.
2. Найдите .htaccess в списке файлов. Откройте его, нажав Редактировать в правом верхнем углу.
Как только у вас откроется файл.htaccess, вставьте строку кода, подобную этой, заменив пример политики своей собственной:
Header set Content-Security-Policy "default-src 'none'; img-src ‘self’ https://example.com; script-src 'self';"
Добавьте CSP с помощью Nginx
Если вместо этого ваш сайт использует сервер Nginx, добавить CSP так же просто, и процесс аналогичен. Опять же, получите доступ к своему сайту по FTP или используйте cPanel/пользовательскую панель вашего веб-хостинга. Вот как это сделать с помощью cPanel:
1. Войдите в cPanel и откройте файловый менеджер, как описано выше.
2. Вместо .htaccess вы ищете nginx.conf, который обычно находится в каталоге /etc/nginx/.
3. Как указано выше, нажмите Редактировать в верхней панели, чтобы открыть nginx.conf.
Как только вы откроете nginx.conf, найдите серверный блок («server {«) и вставьте этот код куда-нибудь в его квадратные скобки, заменив пример кода своим собственным.
add_header Content-Security-Policy "default-src 'none'; img-src ‘self’ https://example.com; script-src 'self';";
Используйте плагин для добавления политики безопасности контента
Для тех, кто предпочитает более простой подход без использования кода, существует множество плагинов WordPress, которые могут помочь вам настроить CSP. Если вам неудобно редактировать файлы сервера напрямую, этот метод идеален.
Существует множество плагинов, которые могут помочь, включая HTTP Headers и Headers Security Advanced & HSTS WP. Мы покажем вам, как использовать последний, поскольку он наиболее известен.
На панели управления WordPress перейдите к Плагины> Добавить новый плагин и найдите Headers Security Advanced и HSTS WP. Установите и активируйте его.
Перейдите в Настройки> Расширенные возможности безопасности заголовков и HSTS WP и прокрутите вниз до Содержимого заголовка CSP.
Заполните поле созданной вами Политикой безопасности контента.
Протестируйте свою политику безопасности контента
После того, как вы успешно внедрили CSP, последний шаг — протестировать его и убедиться, что все работает. Если это непреднамеренно блокирует законные ресурсы, это может быть очевидным или незаметным.
Откройте в браузере Инструменты разработчика и проверьте консоль на наличие ошибок, связанных с заблокированными ресурсами.
Используйте онлайн-средство проверки CSP, например, средство оценки политики или средство оценки CSP от Google, которое дополнительно проверит, нет ли в вашей политике неправильных настроек безопасности.
Используйте директивы report-uri или report-to в вашем CSP для сбора данных о нарушениях политики. Вы можете проверять это со временем, чтобы увидеть, блокируется ли законный ресурс.
Возникли проблемы? Давайте попробуем их исправить.
Проблемы политики безопасности контента и способы их устранения
Внедрение CSP сопряжено с трудностями, и получение рабочей политики может стать серьезным испытанием в зависимости от настроек вашего сервера. Вот некоторые проблемы, с которыми вы можете столкнуться, и стратегии их решения.
Встроенные скрипты и стили
WordPress и многие плагины и темы часто используют встроенные скрипты и стили. CSP ограничивает встроенные выполнения, если явно не разрешено использование директивы «unsafe-inline», которая может открыть уязвимости. Вам нужно будет либо преобразовать встроенные скрипты во внешние файлы, либо использовать одноразовые номера или хэши, управлять которыми может быть сложно.
Конфликты с другими плагинами
Плагины часто добавляют свои собственные скрипты и внешние ресурсы. С каждым добавляемым плагином вам, возможно, придется изменять свой CSP, чтобы разрешить доступ к их ресурсам. Вам потребуется провести аудит и обновить свой CSP при установке новых плагинов.
Нарушенная функциональность веб-сайта
Строгий CSP может непреднамеренно заблокировать законные ресурсы, что приведет к неработоспособности веб-сайта. Использование инструментов разработчика браузера может помочь вам идентифицировать неработающие скрипты.
Неправильный синтаксис заголовка
Ошибки в синтаксисе вашего CSP могут привести к сбою всей политики, что не приведет к принудительному исполнению. Используйте инструменты проверки CSP, подобные перечисленным выше, чтобы проверить ваш синтаксис на наличие ошибок.
Отсутствие поддержки браузера
Некоторые старые браузеры не поддерживают CSP или некоторые из его директив или могут интерпретировать их по-другому. Возможно, вы захотите реализовать резервные заголовки безопасности HTTP, такие как X-Frame-Options и X-XSS-Protection.
Проблемы с производительностью
Сложный CSP с множеством различных разрешенных источников и директив может снизить производительность вашего сайта из-за необходимости проверять каждый отдельный ресурс. Может помочь использование подстановочных знаков для объединения источников. Если ваша директива report-uri генерирует тонны отчетов, это также может замедлить работу вашего сервера, поэтому убедитесь, что вы исправили любую ошибку, вызвавшую это.
Проблемы со смешанным контентом HTTPS
Если ваш CSP применяет протокол HTTPS, но ваш сайт по-прежнему ссылается на контент HTTP, браузеры заблокируют эти ресурсы, потенциально нарушая функциональность сайта. Некоторые средства проверки CSP могут выявлять проблемы со смешанным контентом, и вы должны убедиться, что весь контент загружается по протоколу HTTPS. Директива «обновить-небезопасные запросы» также может помочь.
CSP для WordPress является частью более масштабной стратегии
Политика безопасности контента служит основной защитой от межсайтовых скриптовых атак и всевозможных других вредоносных атак. Одна строка кода может существенно повлиять на безопасность вашего сайта.
Каким бы эффективным это ни было, внедрение CSP является лишь второстепенной линией защиты. Необходима комплексная стратегия безопасности, сочетающая несколько уровней защиты.