Заголовки безопасности HTTP — отличный способ повысить безопасность вашего сайта WordPress. Их задача — защищать целостность запросов и ответов. Современные браузеры поддерживают множество заголовков безопасности HTTP. Они защищают ваших посетителей от различных типов атак браузера, таких как кликджекинг, межсайтовый скриптинг и другие распространенные атаки. Они даже улучшают конфиденциальность посетителей вашего сайта в Интернете.
В этой статье мы рассмотрим, что это за заголовки безопасности HTTP, объясним, как они работают, и как вы можете добавить эти заголовки на свой веб-сайт, чтобы улучшить безопасность вашего сайта WordPress.
- Что такое заголовки безопасности WordPress?
- Как заголовки безопасности HTTP могут улучшить безопасность WordPress
- Наиболее часто используемые заголовки безопасности HTTP
- Strict-Transport-Заголовок безопасности (HSTS)
- Почему важен HSTS?
- Заголовок Content-Security-Policy (CSP)
- Заголовок X-Content-Type-Options
- Заголовок X-Frame-Options
- Заголовок политики реферера
- Заголовок Expect-CT (прозрачность сертификата)
- Заголовок X-XSS-Protection (Устаревший)
- Public-Key-Pins
- Как просмотреть заголовки безопасности вашего сайта
- Добавление заголовков безопасности HTTP в WordPress
- Добавление заголовков безопасности HTTP в WordPress с помощью HTTP-сервера Apache
- Пример настройки заголовка безопасности
- Добавление заголовков безопасности HTTP в WordPress с помощью Nginx
- Добавление заголовков безопасности HTTP в файл functions.php
- Добавление заголовков безопасности HTTP в WordPress с помощью плагина
- Добавление заголовков безопасности HTTP в WordPress через ваш CDN
- Какие заголовки безопасности следует добавить в WordPress?
- Анализ каждого заголовка безопасности
- Вопросы и ответы
Что такое заголовки безопасности WordPress?
Когда мы говорим о заголовках безопасности WordPress, мы на самом деле говорим о заголовках безопасности HTTP. Думайте о заголовках HTTP как о пакетах информации, которые веб-сервер отправляет клиентам. Эта информация не видна пользователю, но влияет на то, как информация обрабатывается.
Заголовки безопасности HTTP не зависят от WordPress. В WordPress они работают так же, как и для любого другого веб-сайта.
Заголовки HTTP указаны в RFC (Запросе комментариев); документах, в которых изложены спецификации. Таким образом, если вы хотите углубиться в технические детали конкретного заголовка, все, что вам нужно сделать, это обратиться к соответствующему RFC.
Заголовки безопасности, в частности, определяют связанные с безопасностью настройки HTTP-связи между веб-клиентом (посетителями вашего веб-сайта) и сервером (вашим сервером WordPress). Включение заголовков безопасности на вашем веб-сайте WordPress может повысить устойчивость вашего веб-сайта к распространенным атакам, включая межсайтовый скриптинг (XSS) и кликджекинг.
Как заголовки безопасности HTTP могут улучшить безопасность WordPress
Заголовки безопасности HTTP могут помочь улучшить безопасность вашего веб-сайта WordPress, указав браузеру включить различные функции безопасности. Реализация заголовков требует определенного планирования. Некоторые заголовки устарели и заменены более новыми вариантами. Однако старые браузеры могут некорректно реализовывать эти новые заголовки. Например, Internet Explorer 11 не полностью поддерживает CSP (Политику безопасности контента).
Таким образом, считается наилучшей практикой тестировать любые изменения в тестовой или промежуточной среде, прежде чем применять какие-либо изменения на действующем сайте WordPress.
Профессиональный совет: Если на вашем веб-сайте есть аналитика, вы должны иметь возможность получить довольно хорошее представление о том, какими браузерами пользуются ваши пользователи. Это может помочь вам запускать более релевантные тесты и использовать только те заголовки, которые поддерживаются этими браузерами.
Наиболее часто используемые заголовки безопасности HTTP
Какие заголовки что делают? Давайте углубимся в обзор некоторых наиболее важных и часто используемых заголовков безопасности HTTP.
Strict-Transport-Заголовок безопасности (HSTS)
HTTP-заголовок Strict-Transport-Security предписывает браузеру принудительно использовать HTTP Strict Transport Security (HSTS). HSTS предписывает браузеру посетителя всегда получать доступ к сайту по протоколу HTTPS (вместо HTTP), даже если пользователь (или злоумышленник, пытающийся запустить атаку «Человек посередине») пытается получить доступ к сайту по протоколу HTTP.
При использовании этого заголовка браузер всегда будет переключаться на HTTPS. Таким образом, вы должны включать HSTS только в том случае, если у вас включен HTTPS и он полностью работает без проблем со смешанным контентом.
Следующий заголовок HTTP Strict Transport Security (HSTS) включает HSTS сроком на 1 год (31536000 секунд).
Strict-Transport-Security: max-age=31536000
Почему важен HSTS?
Злоумышленнику очень сложно запустить атаку «человек посередине», когда вы используете HTTPS. Поскольку данные зашифрованы, их практически невозможно прочитать. Таким образом, они попытаются понизить уровень подключения до HTTP, чтобы иметь возможность считывать данные.
При использовании заголовка HSTS браузер отказывается подключаться по HTTP, что делает атаку бесполезной.
Заголовок Content-Security-Policy (CSP)
Заголовок безопасности HTTP Content-Security-Policy — это HTTP-заголовок с большим количеством возможностей и параметров конфигурации. Он настраивает политику безопасности содержимого браузера (CSP), которая представляет собой набор функций безопасности, имеющихся в современных браузерах. Они обеспечивают дополнительный уровень безопасности, который помогает обнаруживать и смягчать атаки, такие как межсайтовый скриптинг (XSS) и атаки с внедрением данных.
Политика безопасности контента (CSP) также общеизвестно сложна в настройке. Это связано с тем, что правильные настройки CSP будут сильно различаться в зависимости от конкретного веб-сайта. Как таковой, он должен быть тщательно протестирован перед развертыванием — настолько, чтобы у него был дочерний HTTP-заголовок Content-Security-Policy-Report-Only, используемый только для тестирования CSP.
Ниже приведен пример довольно простой политики безопасности контента (CSP), которая позволяет загружать ресурсы только из источника, с которого обслуживается веб-сайт.
Content-Security-Policy: default-src 'self'
Однако Content-Security-Policy (CSP) гораздо более настраиваема, чем показано в этом простом примере. CSP включает другие директивы, такие как script-src, style-src и img-src, чтобы указать источники, из которых браузер может загружать ресурсы (например, CSS, изображения и шрифты).
Заголовок X-Content-Type-Options
Заголовок безопасности HTTP X-Content-Type-Options — это нестандартный заголовок. Он поддерживается всеми основными браузерами и предотвращает атаки с использованием межсайтовых скриптов (XSS), вызванные прослушиванием типа MIME. При наличии этого заголовка браузеру предлагается строго следовать типам MIME, определенным в заголовке HTTP типа содержимого. Он также сообщает браузеру, что ему не следует пытаться определить правильный тип MIME для самих данных ответа. Заголовок имеет единственную директиву — nosniff.
X-Content-Type-Options: nosniff
Заголовок X-Frame-Options
Заголовок безопасности HTTP X-Frame-Options теперь в значительной степени заменен директивой frame-ancestors Content Security Policy (CSP). Хотя рекомендуется использовать CSP с директивой frame-ancestors вместо X-Frame-Options, использование обоих обеспечивает более широкую совместимость с различными браузерами.
Впервые он был представлен Microsoft Internet Explorer (и принят другими браузерами с разной степенью единообразия и совместимости) для защиты браузеров от межсайтового скриптинга (XSS), кликджекинга и других атак, которые основаны на размещении веб-сайта внутри iframe.
Доступны два варианта:
DENY: используется для предотвращения встраивания веб-сайта во фрейм или iframe
X-Frame-Options: DENY
SAMEORIGIN: Позволяет размещать веб-сайт во фрейме, пока запрос поступает из того же домена веб-сайта.
X-Frame-Options: SAMEORIGIN
Заголовок политики реферера
Заголовок политики ссылок определяет, какая часть ссылающегося URL является общедоступной. В принципе, этот заголовок позволяет вам сбалансировать конфиденциальность пользователей с требованиями аналитики и маркетинга. Здесь вам нужно обратить особое внимание на то, какими данными вы делитесь. Например, вам нужно быть осторожным и не передавать идентификаторы пользователей или сеансов сторонним веб-сайтам, поскольку это может поставить под угрозу конфиденциальность и безопасность пользователей.
Доступно несколько вариантов настройки заголовка политики реферера, в том числе:
No Referrer: Вообще не передает никакой информации и гарантирует максимальную конфиденциальность пользователя
Referrer-Policy: no-referrer
No Referrer When Downgrade: не отправляет никаких данных всякий раз, когда пользователь переходит со страницы HTTPS на страницу HTTP.
Referrer-Policy: no-referrer-when-downgrade
Same Origin: ограничивает обмен данными навигацией в пределах того же источника, который включает домен, протокол и порт.
Referrer-Policy: same-origin
Strict Origin: переводит тот же источник на следующий уровень и ограничивает обмен данными навигацией в пределах того же источника и уровня безопасности.
Referrer-Policy: strict-origin
Заголовок Expect-CT (прозрачность сертификата)
Прозрачность сертификатов — это механизм, с помощью которого сертификаты SSL/TLS проверяются центром сертификации (CA). Его цель — гарантировать, что сертификаты не были выданы мошенническим путем и не используются не по назначению. При установке заголовок сообщает браузерам, что сертификат TLS совместим с CT, то есть зарегистрирован в центре сертификации.
Заголовок Expect-CT принимает ряд атрибутов, в том числе:
- принудительное применение: обеспечивает соблюдение политики
- максимальный возраст: политика времени должна быть кэширована для
- report-uri: URL для сообщения об ошибках политики
Expect-CT: enforce, max-age=86400, report-uri="https://melapress.com/example/report"
Заголовок X-XSS-Protection (Устаревший)
Заголовок безопасности HTTP X-XSS-Protection был нестандартным заголовком. Он был введен для включения или отключения защиты браузера от атак с использованием межсайтовых скриптов (XSS). На практике заголовок безопасности XSS protection злоумышленникам было легко обойти, и, как следствие, он игнорируется большинством современных браузеров.
Public-Key-Pins
Заголовок безопасности HTTP Public-Key-Pins используется для настройки функции безопасности с открытым ключом (HPKP). Он был введен в Google Chrome и Firefox для предотвращения подмены сертификата TLS. HPKP работал за счет того, что веб-сервер предоставлял браузеру набор криптографических хэшей открытых ключей сертификата TLS, используемых веб-сайтом. Затем браузер будет использовать их для сравнения с сертификатами, которые он получает от сервера в последующих запросах. Проблема заключалась в том, что HPKP был довольно сложным в управлении и часто приводил к неправильным настройкам, которые могли полностью отключить доступ к веб-сайту. Как таковой, его больше не рекомендуется использовать.
Как просмотреть заголовки безопасности вашего сайта
Прежде чем вы начнете обдумывать, какие заголовки безопасности реализовать, вы можете сначала проверить, какие заголовки, если таковые имеются, уже активны на вашем веб-сайте.
Вы можете использовать такие инструменты, как заголовки безопасности, чтобы увидеть, какие заголовки безопасности активны в данный момент.
Добавление заголовков безопасности HTTP в WordPress
Заголовки безопасности HTTP работают лучше всего, когда они настроены на вашем веб-сервере или, где применимо, в вашей сети доставки контента (CDN) или брандмауэре веб-приложений. Это позволяет отправлять их при каждом запросе. В качестве альтернативы, хотя это и не идеально, вы можете использовать плагин WordPress для настройки этих заголовков за вас.
Теперь, когда мы рассмотрели назначение заголовков безопасности HTTP, вот несколько способов, которыми их можно включить на вашем веб-сайте WordPress.
- Файл Apache .htaccess
- Файл конфигурации Nginx
- functions.php
- Плагин
- CDN
Добавление заголовков безопасности HTTP в WordPress с помощью HTTP-сервера Apache
Если ваши сайты WordPress размещены на веб-сервере Apache, вы можете добавить заголовки безопасности HTTPS непосредственно в .htaccess файл. Основным преимуществом здесь является то, что любые настроенные политики автоматически применяются к любому HTTP-ответу, отправляемому сервером, включая ответы от WordPress.
Самый простой способ получить доступ к вашему файлу htaccess — это через SFTP, либо через клиент, такой как FileZilla, либо через серверную часть вашего хостинг-провайдера. Вы также можете получить доступ к файлу через SSH и отредактировать его с помощью CLI-редактора, такого как nano или vim.
Пример настройки заголовка безопасности
Ниже приведен пример конфигурации HTTP-сервера Apache, необходимой для включения ряда заголовков безопасности, на основе того, что мы рассмотрели ранее.
<IfModule mod_headers.c>
# X-Frame-Options to prevent clickjacking
Header set X-Frame-Options "SAMEORIGIN"
# X-Content-Type-Options to prevent MIME-type sniffing
Header set X-Content-Type-Options "nosniff"
# Strict-Transport-Security to enforce HTTPS
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# Content-Security-Policy to control resources loaded on the page
Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted-scripts.com"
# Referrer-Policy to control how much referrer information is shared
Header set Referrer-Policy "no-referrer-when-downgrade"
# X-XSS-Protection to enable basic XSS protection (for older browsers)
Header set X-XSS-Protection "1; mode=block"
</IfModule>
Добавление заголовков безопасности HTTP в WordPress с помощью Nginx
С другой стороны, если вы используете Nginx в качестве своего веб-сервера, вы можете обновить файл конфигурации Nginx аналогично файлу htaccess в Apache.
Аналогичным образом, ниже приведен пример конфигурации для Nginx:
server {
listen 443 ssl;
# X-Frame-Options to prevent clickjacking
add_header X-Frame-Options "SAMEORIGIN";
# X-Content-Type-Options to prevent MIME-type sniffing
add_header X-Content-Type-Options "nosniff";
# Strict-Transport-Security to enforce HTTPS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
# Content-Security-Policy to control resources loaded on the page
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted-scripts.com";
# Referrer-Policy to control how much referrer information is shared
add_header Referrer-Policy "no-referrer-when-downgrade";
# X-XSS-Protection to enable basic XSS protection
add_header X-XSS-Protection "1; mode=block";
}
Добавление заголовков безопасности HTTP в файл functions.php
Добавление заголовков безопасности WordPress в файл functions.php — это еще один вариант, который может быть проще, чем редактирование файла htaccess или файла конфигурации Nginx. Однако имейте в виду, что файл functions.php зависит от темы. Таким образом, если вы переключите темы, настроенные заголовки безопасности не останутся активными.
Вы можете получить доступ к файлу functions.php несколькими способами, включая SFTP или SSH. В отличие от двух рассмотренных ранее методов, вы также можете добавить заголовки через wp-admin. Просто перейдите в Инструменты > Редактор файлов темы и отредактируйте свой functions.php файл.
Редактирование вашего файла functions.php не рекомендуется. Вместо этого вам следует сначала создать дочернюю тему или внести изменения в тестовую/промежуточную среду.
Каким бы способом вы ни решили отредактировать файл, вы можете добавить заголовки безопасности, создав функцию и указав заголовки безопасности, которые вы хотите использовать в этой функции, как показано в примере кода ниже:
function add_security_headers() {
// X-Frame-Options to prevent clickjacking
header('X-Frame-Options: SAMEORIGIN');
// X-Content-Type-Options to prevent MIME-type sniffing
header('X-Content-Type-Options: nosniff');
// Strict-Transport-Security to enforce HTTPS
header('Strict-Transport-Security: max-age=31536000; includeSubDomains; preload');
// Content-Security-Policy to control resources loaded on the page
header("Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-scripts.com");
// Referrer-Policy to control how much referrer information is shared
header('Referrer-Policy: no-referrer-when-downgrade');
// X-XSS-Protection to enable basic XSS protection
header('X-XSS-Protection: 1; mode=block');
}
add_action('send_headers', 'add_security_headers');
Добавление заголовков безопасности HTTP в WordPress с помощью плагина
Альтернативно, хотя и менее эффективно (поскольку изменение заголовков зависит от самого WordPress), использование плагина WordPress может быть самым простым способом добавления заголовков безопасности HTTP на ваш веб-сайт WordPress. Плагины, такие как плагин Redirection, позволяют добавлять пользовательские заголовки HTTP на ваш веб-сайт.
Добавление заголовков безопасности HTTP в WordPress через ваш CDN
Многие CDN (сети доставки контента) включают возможность добавлять заголовки безопасности HTTP через свои настройки. Есть два основных преимущества указания заголовков безопасности на уровне CDN:
- CDN всегда будет обслуживать заголовки безопасности
- Поскольку запросы обрабатываются CDN, производительность сервера WordPress не снижается
Точная процедура добавления заголовков безопасности HTTP на уровне CDN будет отличаться у разных поставщиков. Например, в Cloudflare вы можете добавить их, перейдя к Правилам, а затем создав страницу для домена, к которому вы хотите добавить заголовки безопасности HTTP.
Какие заголовки безопасности следует добавить в WordPress?
В WordPress нет жестких правил, когда дело доходит до заголовков безопасности. Таким образом, каждый администратор волен внедрять те заголовки безопасности, которые решают любые проблемы безопасности, которые у него могут возникнуть. Сказав это, вы можете реализовать заголовки безопасности в WordPress на основе рекомендаций по лучшим практикам следующим образом:
# Strict-Transport-Security (HSTS)
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
# Content-Security-Policy (CSP)
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-scripts.com
# X-Frame-Options
X-Frame-Options: SAMEORIGIN
# X-Content-Type-Options
X-Content-Type-Options: nosniff
# Referrer-Policy
Referrer-Policy: no-referrer-when-downgrade
# X-XSS-Protection
X-XSS-Protection: 1; mode=block
# Access-Control-Allow-Origin (CORS Header)
Access-Control-Allow-Origin: https://trusteddomain.com
#Expect-CT
Expect-CT: enforce, max-age=86400, report-uri="https://example.com/report"
Анализ каждого заголовка безопасности
Давайте быстро рассмотрим каждый из рекомендуемых заголовков безопасности, их директивы и роль, которую они играют в обеспечении безопасности WordPress:
- HSTS: Заставляет браузер использовать HTTPS и кэширует политику в течение года, позволяет любым поддоменам наследовать политику. Это также позволяет включить веб-сайт в список сайтов с предварительной загрузкой HSTS.
- CSP: Действует как заголовок безопасности XSS protection, предотвращая запуск вредоносных скриптов на сайте. Он сообщает о любых нарушениях, чтобы помочь выявить уязвимости. Обратите внимание, что вам нужно будет заменить их https://trusted-scripts.com вашим доверенным доменом.
- X-Frame-Опции: Предотвращает кликджекинг и разрешает создание фреймов только из того же домена WordPress.
- X-Content-Type-Options: Опция nosniff заставляет браузеры следовать типу содержимого в заголовках, предотвращая атаки.
- Политика ссылок: Политика ссылок в первую очередь предназначена для защиты конфиденциальности посетителей. Директива, предотвращающая утечку данных на незащищенные страницы (HTTP).
- X-XSS-защита: Этот заголовок безопасности XSS protection защищает старые браузеры, блокируя XSS-атаки.
- Access-Control-Allow-Origin (заголовок CORS): Определяет, какие домены могут получать доступ к ресурсам вашего веб-сайта. Обратите внимание, что вам нужно будет заменить их https://trusteddomain.com вашим доверенным доменом.
- Expect-CT: Обеспечивает прозрачность сертификата и сообщает о проблемах, чтобы можно было принять корректирующие меры.
Важно отметить, что приведенный выше список предоставлен только в ознакомительных целях. Ваши требования могут отличаться. Учитывайте свои потребности при добавлении заголовков безопасности HTTP для вашего сайта WordPress.
Вопросы и ответы
Что такое заголовки безопасности в WordPress?
Заголовки безопасности в WordPress относятся к заголовкам безопасности HTTP, используемым в контексте веб-сайта WordPress. Хотя заголовков, специфичных для WordPress, нет, вы можете добавить любые заголовки безопасности через файл конфигурации веб-сервера, файл functions.php или свой CDN, если вы его используете.
Как добавить заголовок Content-Security-Policy в WordPress?
Существует несколько вариантов добавления заголовка Content-Security-Policy в WordPress. Если у вас есть доступ SFTP или SSH, вы можете добавить их в файлы конфигурации вашего сервера WordPress. Другой вариант — добавить заголовки безопасности HTTP в файл functions.php. Однако при смене команды заголовки также будут удалены. Другой вариант — указать их в вашем CDN.
Какие заголовки безопасности я должен использовать?
Не существует правил относительно того, какие заголовки следует использовать для того или иного веб-сайта. Однако заголовки безопасности, такие как HSTS и CSP, обеспечивают отличную безопасность и должны быть в верхней части вашего списка. Другие опции включают параметры X-Frame-Options, параметры X-Content-Type-Options и политику ссылок. Обратитесь к статье о дополнительных заголовках безопасности, которые вы можете реализовать на своем веб-сайте WordPress, включая примеры кода.