Настройка HTTP-заголовков безопасности веб-сайта или веб-приложения
Заголовки безопасности сайтов на WordPress и других CMS
Заголовки безопасности HTTP, также известные как заголовки безопасности WordPress, предназначены для защиты ваших приложений от распространенных атак без необходимости изменения исходного кода.
Безопасность веб-сайта или веб-приложения имеет несколько аспектов, и один из эффективных способов улучшить ее — использовать заголовки безопасности.
Что представляют собой заголовки безопасности WordPress? Заголовки безопасности для WordPress обеспечивают дополнительный уровень защиты, помогая смягчить атаки и защищая от различных уязвимостей безопасности.
В этой статье мы рассмотрим различные типы заголовков безопасности и поможем вам добавить их на ваш сайт WordPress для повышения его безопасности. Это также применимо к другим CMS.
Добавление заголовков безопасности HTTP в WordPress с помощью плагина
Этот метод позволяет использовать плагин WordPress для изменения заголовков. Хотя он менее эффективен, это самый простой способ добавить заголовки безопасности HTTP на ваш веб-сайт WordPress.
Сначала установите и активируйте один из следующих плагинов:
- HTTP Headers
- Redirection
- Headers Security Advanced & HSTS WP
- GD Security Headers
После активации плагин предоставит необходимые опции для настройки.
HTTP Strict Transport Security (HSTS)
HTTP Strict Transport Security (HSTS) позволяет серверам сообщать браузерам, что они должны использовать только безопасные соединения HTTPS, никогда не обращаясь к небезопасному протоколу HTTP.
Пример:
Strict-Transport-Security: {параметр1} ; {параметр2} max-age устанавливает время в секундах, в течение которого браузер должен использовать протокол HTTPS.
includeSubDomains — дополнительный параметр, распространяющий это правило на все поддомены сайта.
Добавление заголовков безопасности HTTP в WordPress с помощью .htaccess
HTTP Strict Transport Security (HSTS) в WordPress Чтобы добавить заголовок безопасности HSTS на сайт WordPress, добавьте несколько строк кода в файл .htaccess для Apache или файл nginx.conf для NGINX.
Конфигурация Apache .htaccess
<VirtualHost 192.168.1.1:443>
Header always set Strict-Transport-Security “max-age=31536000;
includeSubDomains”
</VirtualHost>
Конфигурация Nginx
add_header Strict-Transport-Security max-age=31536000;
X-Frame-Options
Заголовок X-Frame-Options защищает от атак Clickjacking, когда содержимое вашего сайта загружается на другом сайте через iframe.
Пример:
X-Frame-Options: {параметр} deny — полностью запрещает рендеринг в iframe.
sameorigin — запрещает рендеринг, если источник не совпадает.
allow-from: DOMAIN — разрешает рендеринг только из указанного домена.
Добавление заголовка безопасности X-Frame-Options в WordPress
Добавьте заголовок X-Frame-Options в ваш сайт WordPress, настроив файл .htaccess для Apache или файл nginx.conf для NGINX.
Конфигурация Apache
<IfModule mod_headers.c>
Header always append X-Frame-Options SAMEORIGIN
</IfModule>
Конфигурация Nginx
add_header X-Frame-Options «SAMEORIGIN» always;
X-XSS-Protection
Заголовок X-XSS-Protection помогает защититься от атак XSS в популярных браузерах.
Пример:
X-XSS-Protection: {параметр1}; {параметр2} 0 — отключает фильтр.
1 — включает фильтр.
1; mode=block — включает фильтр и блокирует отрисовку страницы при обнаружении атаки.
Добавление заголовка X-XSS-Protection в WordPress
Добавьте заголовок X-XSS-Protection в ваш сайт WordPress, настроив файл .htaccess для Apache или файл nginx.conf для NGINX.
Конфигурация Apache
<IfModule mod_headers.c>
Header set X-XSS-Protection «1; mode=block»
</IfModule>
Конфигурация Nginx
add_header X-Xss-Protection «1; mode
Универсальные правила HTTP-заголовков безопасности для всех сайтов с помощью .htaccess
- X Frame Options
- X XSS Protection
- X Content Type Options
- X Permitted Cross Domain Policies
- Strict Transport Security
- Content Security Policy
- Referrer Policy
- Feature Policy
- Expect CT
- Permissions-Policy
Вот универсальные правила для настройки HTTP-заголовков безопасности для всех сайтов с использованием файла .htaccess:
# Security Headers
<IfModule mod_headers.c>
# X-Frame-Options
Header always set X-Frame-Options "SAMEORIGIN"
# X-XSS-Protection
Header always set X-XSS-Protection "1; mode=block"
# X-Content-Type-Options
Header always set X-Content-Type-Options "nosniff"
# X-Permitted-Cross-Domain-Policies
Header always set X-Permitted-Cross-Domain-Policies "none"
# Strict Transport Security (HSTS)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# Content Security Policy (CSP)
# Header always set Content-Security-Policy "default-src * data:; script-src https: 'unsafe-inline' 'unsafe-eval'; style-src https: 'unsafe-inline'"
Header set Content-Security-Policy "font-src 'self' https://fonts.gstatic.com data:; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests; block-all-mixed-content;"
# Referrer Policy
Header always set Referrer-Policy "no-referrer-when-downgrade"
# Feature Policy
Header always set Feature-Policy "camera 'none'; fullscreen 'self'; geolocation *; microphone 'self' https://www.example/*"
# Expect-CT
Header always set Expect-CT "enforce, max-age=31536000, report-uri=https://your.report-uri.com/r/d/ct/enforce"
# Permissions-Policy
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()"
</IfModule>
Дополнительный вариант:
# Security Headers
<IfModule mod_headers.c>
Header set Content-Security-Policy "upgrade-insecure-requests"
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header set X-Xss-Protection "1; mode=block"
Header set X-Frame-Options "SAMEORIGIN"
Header set X-Content-Type-Options "nosniff"
Header set Referrer-Policy "strict-origin-when-cross-origin"
Header set Permissions-Policy "geolocation=self"
Header set X-Permitted-Cross-Domain-Policies "none"
Header set Feature-Policy "camera 'none'; fullscreen 'self'; geolocation *; microphone 'self' https://www.example/*"
Header set Expect-CT enforce,max-age=31536000,report-uri="https://foo.example/report"
# Header set Expect-CT: enforce,max-age=31536000,report-uri="https://your.report-uri.com/r/d/ct/enforce"
</IfModule>
Эти правила добавят необходимые HTTP-заголовки безопасности для защиты вашего веб-сайта от различных видов атак и улучшения общей безопасности. Применение этих правил может помочь предотвратить уязвимости и улучшить безопасность вашего сайта в целом.
Как проверить заголовки безопасности HTTP для веб-сайта
Теперь вы добавили заголовки безопасности HTTP на свой веб-сайт. Вы можете протестировать свою конфигурацию с помощью бесплатного инструмента Security Headers:
- https://www.serpworx.com/check-security-headers/
- https://www.atatus.com/tools/security-header
- https://www.genelify.com/tools/security-headers-checker
- https://securityheaders.com/ (немного глючит)
Content Security Policy (CSP)
- https://csp-evaluator.withgoogle.com/
HSTS preload list
- https://hstspreload.org/
Просто введите URL своего веб-сайта и нажмите кнопку «Сканировать».
HTTP-заголовки Last-Modified, 304 Not Modified, If-Modified-Since
HTTP-заголовки Last-Modified, 304 Not Modified, If-Modified-Since для Вашего сайта.
Заголовок Last-Modified является мощным инструментом, способствующим ускорению индексации новых страниц в сети Интернет. Этот HTTP-заголовок передает клиенту время последнего изменения документа или веб-страницы. Когда клиент отправляет запрос на сервер с заголовком «If-Modified-Since», и дата последнего изменения страницы совпадает с указанной, сервер возвращает заголовок «304 Not Modified» и не загружает страницу заново. Таким образом, клиент экономит трафик, а сервер отправляет меньше данных, что приводит к обоюдной экономии.
Зачем нам нужно использовать заголовок Last-Modified? Этот инструмент не только ускоряет индексацию страниц, но и значительно упрощает процесс SEO-оптимизации сайта. Важно помнить, что 10 страниц сайта будут проиндексированы гораздо быстрее, чем 1000. Поэтому, с помощью настройки заголовка Last-Modified мы позволяем поисковым роботам сосредоточиться на новых или обновленных страницах, что способствует более эффективной индексации и повышает общее качество SEO-оптимизации сайта.
Хотя заголовки last-modified и sitemap xml являются рекомендациями, а не обязательными элементами, их использование может существенно повлиять на процесс индексации сайта поисковыми системами. Эти инструменты позволяют роботам быстрее находить и обрабатывать изменения на вашем сайте, что может привести к улучшению его позиций в поисковой выдаче.
Цитата из руководства Google.
Настройка заголовка Last-Modified не представляет сложностей. Основные поисковые системы, такие как Google, рекомендуют использовать этот инструмент для ускорения процесса индексации. Для этого достаточно правильно сконфигурировать ваш сервер и обрабатывать заголовки правильно. Приведенные выше примеры демонстрируют, как настроить заголовок Last-Modified для различных ситуаций, включая статические страницы, скрипты PHP и конфигурацию сервера через файл .htaccess или nginx.
Как настроить meta Last-Modified для статичных html страниц
<meta http-equiv="Last-Modified" content="Sun, 11 Sep 2024 17:31:28 GMT">
Как настроить Last-Modified в php
<?php $LastModified_unix = 1294844676; $LastModified = gmdate("D, d M Y H:i:s GMT", $LastModified_unix); $IfModifiedSince = false; if (isset($_ENV['HTTP_IF_MODIFIED_SINCE'])) $IfModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5)); if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) $IfModifiedSince = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5)); if ($IfModifiedSince && $IfModifiedSince >= $LastModified_unix) { header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified'); exit; } header('Last-Modified: '. $LastModified); ?>
Как настроить Last-Modified .htaccess
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}] RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]
Как настроить Last-Modified nginx + php
location ~ .php$ { … if_modified_since off; fastcgi_pass fcgi; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /<путь > /web$fastcgi_script_name; … fastcgi_pass_header Last-Modified; include fastcgi_params; }
Как настроить Last-Modified в WordPress
Есть плагины с необходимым функционалом:
- Clearfy
- Last-Modified and If-Modified-Since Headers
- WP Last Modified Info.
Наконец, не забывайте проверять корректность настройки заголовка Last-Modified. Для этого можно воспользоваться онлайн-сервисами как http://last-modified.com/ru/if-modified-since.html или своими собственными скриптами как:
<?php $ch = curl_init(); $url = 'http://site.com.ua/1.php '; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'If-Modified-Since: Sun, 01 Sep 2001 17:33:22 GMT' )); ob_start(); curl_exec ($ch); curl_close ($ch); $data = ob_get_contents(); ob_end_clean(); echo nl2br($data); ?>
Это позволит убедиться, что ваш сайт оптимально сконфигурирован для ускорения индексации и обеспечения высокого качества работы в сети Интернет.
Если нужна индивидуальная разработка, установка и настройка, можно обратиться за помощью к нашим специалистам через форму обратной связи.