НОВОСТИ

Проверяем и оптимизируем HTTP-заголовки сайта

О чем будет сегодняшний блог? О HTTP-заголовках. Многие, к сожалению, забывают или просто игнорируют их. А по факту: некоторые HTTP-заголовки не только бессмысленны, но и существенно ухудшают кибербезопасность сайта, предоставляя конфиденциальную информацию любому желающему. Например, просмотрев HTTP-headers сайта конкурента, я смог узнать текущую версию веб-сервера, версию PHP,  версию программного обеспечения на сервере, и даже название шаблона сайта. Но есть и полезные HTTP-заголовки, которые наоборот улучшают безопасность сайта. Обо всем этом я расскажу в моей статье.

Проверяем и оптимизируем HTTP-заголовки сайта

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

HTTP-заголовки – это специальные параметры, содержащие информацию о браузере клиента, запрошенной странице, сервере, и передаются по протоколу HTTP (Hypertext Transfer Protocol – Протокол Передачи Гипертекста).

Получить HTTP Headers сайта можно разными способами:

  • С помощью онлайн-сервиса BERTAL.RU
  • С помощью расширения для браузера Firebug или Chrome/Firefox Dev Tools
  • В консоли Linux командой: curl -I https://example.com

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

Список HTTP-заголовков

Заголовок Значение Статус
date Текущие дата и время Требуется по протоколу
content-type Язык разметки, тип контента Обычно требуется браузером
server Сигнатура веб-сервера Необязателен
content-length Размер контента в байтах Полезен
last-modified Последнее изменение страницы Полезен
cache-control Управляет кешированием сайта. Указывает правила кеширования. Эффективность проверить можно тут. Полезен
content-encoding Кодировка страницы Требуется для сжатого контента
expires Дата предполагаемого срока истечения актуальности контента. Если в ответе с сервера установлен заголовок Cache-Control с директивами “max-age” или “s-maxage”, заголовок Expires игнорируется. Необязателен
x-powered-by Версия PHP сайта Необязателен
pragma Является заголовком HTTP/1.0 и отвечает за кеширование. Тем не менее, не может служить надежной заменой заголовку “Cache-Control: no-cache”, хотя и ведет себя аналогичным образом когда поле заголовка Cache-Control опущено в запросе. На некоторых CMS включен по умолчанию и взаимодействует с Cache Control. В принципе, выполняет какую-то работу. Необязателен для HTTP/2
x-frame-options Защита от кликджекинга Полезен
access-control-allow-origin Проверка, может ли ресурс быть доступен для контента на текущем домене. Полезен
x-content-type-options Блокировка перехвата содержимого MIME Полезен
link Указывает на логически связный с сущностью ресурс Полезен
age Количество секунд с момента последней модификации ресурса Полезен
x-cache Непонятный заголовок, который добавляют CDN-сервисы Необязателен
x-xss-protection Защита от XSS-атак Полезен
strict-transport-security HSTS заголовок, который уведомляет ботам, что доступ к сайту должен быть только по https. Форсирует безопасность сайта. Полезен
via Общее поле HTTP заголовкаVia служит для отображения списка версий протокола HTTP, названий и версий прокси-серверов, через которые прошло сообщение. Необязателен
p3p Нужен для IE8 чтобы принимать cookies третьих лиц. Устаревший. Необязателен
expect-ct Нужный для декларирования клиенту, что используется механизм Certificate Transparency – то есть сервер получил сертификат через публично журналируемый CA, и запись о выдаче данного сертификата есть и доступна. Полезен
content-language Язык контента Спорно
x-aspnet-version Версия сервера ASP.NET Необязателен
access-control-allow-credentials Проверка безопасности. Нужен для работы некоторых jquery-плагинов. Полезен
x-robots-tag Заголовок X-Robots-Tag используется как элемент HTTP-ответа для определенного URL. В заголовках X-Robots-Tag поддерживаются те же директивы, что и в мета тегах robots. Не имеет значения для браузеров, используется поисковыми ботами Google
x-ua-compatible Призывает Internet Explorer работать в определённом режиме документа. Остальные браузеры должны игнорировать данную прагма директиву. Необязателен
access-control-allow-methods Контроль безопасности Полезен
access-control-allow-headers Контроль безопасности Полезен

Жирным обозначены заголовки, которые можно без риска удалить из ответа сервера.

HTTP Security Headers

Заголовки безопасности предотвращают атаки на сайт, межсайтовый скриптинг, инъекции и эксплойты.

Ниже, подаю заготовку директив для .htaccess, которая добавляет все необходимые заголовки безопасности на сайт:

# BEGIN SECURITY_HEADERS
<IfModule mod_headers.c>
Header always set Strict-Transport-Security: "max-age=63072000; includeSubDomains; preload" env=HTTPS
Header always set Content-Security-Policy "upgrade-insecure-requests"
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy: "no-referrer-when-downgrade"
Header always set Expect-CT "max-age=7776000, enforce"
Header always set X-Frame-Options "sameorigin"
Header always set Permissions-Policy: "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()"
</IfModule>
# END SECURITY_HEADERS

Как убрать HTTP-заголовки?

Убираем http-заголовок Server

Если у вас веб-сервер стандартно на Apache, нужно найти системный файл httpd.conf и добавить в него или изменить 2 строки:

ServerTokens Prod
ServerSignature Off

Если веб-сервер NGINX, то вносим эти 2 директивы в файл nginx.conf.

Убираем версию PHP

Есть 2 варианта. Первый – в .htaccess добавить (протестировано на WordPress):
<IfModule mod_headers.c>
Header always unset X-Powered-By
Header unset X-Powered-By
</IfModule>
Если не сработало, подойдет другой вариант. Предварительно включите в настройках PHP вашего домена опцию – поддержка cgi-bin. Далее находим папку cgi-bin или php-bin. В ней открываем файл php.ini и изменяем параметр (на некоторых хостингах можно просто с помощью редактирования директив):
expose_php на Off

Убираем устаревший заголовок P3P

HTTP-заголовки на самом деле можно удалить и посредством PHP с помощью функции header_remove. Добавляем в самый верх шаблона сайта (header.php или index.php) следующий код:

<?php
header_remove("P3P");
?>

Как проверить HTTP-заголовки

Протестировать HTTP-заголовки можно с помощью 2-х сервисов – SEO Site Checkup и Security Headers by Probely:
Проверяем и оптимизируем HTTP-заголовки сайта
Как проверить HTTP заголовки

Оценка:
( 3 оценки, среднее 5 из 5 )
Подписка на KRASHENININ.TECH

Получайте регулярные обновления на почту!


Виталий Крашенинин/ автор статьи
Основатель блога, публицист, IT-специалист. Предоставляю услуги по администрированию, техническому обслуживанию, поисковой оптимизации и продвижению веб-сайтов.
Не забудьте поделиться материалом в соцсетях:
KRASHENININ.TECH - блог о веб-технологиях, и не только
Подписаться
Уведомление о
guest
0 Комментарий
Встроенные отзывы
Просмотреть все комментарии
0
Есть мысли? Прокомментируй!x
()
x
Читайте ранее:
CSS трюки оформления шрифта
Трюки CSS: стили теней для текста

Сегодня немного поэкспериментируем с CSS стилями. Я подготовил для вас несколько примеров СSS-стилей для текста. Будет интересно. Эти стили можно...

Закрыть