HTTP-заголовки для WEB-сервера

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

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

Все настройки мы будем делать для Apache, файл конфигурации:

/etc/apache2/apache2.conf

1. HTTP Strict Transport Security (HSTS)

Этот заголовок указывает использовать только HTTPS соединения. Это предотвратит доступ веб-браузеров к веб-серверу через соединения, отличные от HTTPS. В настоящее время все основные веб-браузеры поддерживают строгую транспортную безопасность HTTP. У себя я использую след. значения:

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

2. X-XSS-Protection

X-XSS, также известный как заголовок межсайтового скриптинга, используется для защиты от атак межсайтового скриптинга. Фильтр XSS включен по умолчанию в современных веб-браузерах, таких как Chrome, IE и Safari. Этот заголовок останавливает загрузку страниц, когда они обнаруживают отраженные атаки межсайтового скриптинга (XSS).

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

 X-XSS-Protection: 0: полностью отключает фильтр.
 X-XSS-Protection: 1: Включит фильтр, но очистит только потенциально вредоносные сценарии.
 X-XSS-защита: 1; mode=block : это включит фильтр и полностью заблокирует страницу.
Header set X-XSS-Protection "1; mode=block"

3. X-Frame-Options

Заголовок X-Frame-Options используется для защиты вашего сайта от clickjacking путем отключения iframe на вашем сайте. В настоящее время поддерживается всеми основными веб-браузерами. С помощью этого заголовка вы говорите браузеру не встраивать вашу веб-страницу в frame/iframe.

Существует три способа настройки X-Frame-Options:

 DENY: полностью отключает функции iframe.
 SAMEORIGIN : iframe может использоваться только кем-то из того же источника.
 ALLOW-FROM : Это позволит помещать страницы в iframe только с определенных URL-адресов.

Наш вариант настройки:

Header always set X-Frame-Options "SAMEORIGIN"

4. X-Content-Type-Options

Заголовок x-content-type также называется «Защита от прослушивания браузера», чтобы указать браузеру следовать типам MIME, указанным в заголовке. Он используется для предотвращения перехвата ответа веб-браузером, таким как Internet Explorer и Google Chrome, от объявленного Content-Type. Заголовок nosniff не защищает от всех уязвимостей, связанных со сниффингом. Также для этого заголовка нет допустимого значения, кроме nosniff.

Header always set X-Content-Type-Options "nosniff"

5. Referrer-Policy

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

Наш вариант:

Header always set Referrer-Policy "strict-origin"

6. Permissions-Policy

Permissions-Policy — это новый заголовок, который позволяет сайту контролировать, какие API или функции можно использовать в браузере.

Header always set Permissions-Policy "geolocation=(),midi=(),sync-xhr=(),microphone=(),camera=(),magnetometer=(),gyroscope=(),fullscreen=(self),payment=()"

7. Content Security Policy (CSP)

Заголовок Content-Security-Policy является улучшенной версией заголовка X-XSS-Protection и обеспечивает дополнительный уровень безопасности. Это очень мощный заголовок, предназначенный для предотвращения атак XSS и атак через инъекции. CSP указывает браузеру загружать разрешенный контент для загрузки на веб-сайт. В настоящее время все основные браузеры предлагают полную или частичную поддержку политики безопасности контента. Считается одним из самых сложных и мудрённых заголовков в настройке.

Вариант для нашего веб-сервера:

Header set Content-Security-Policy "base-uri 'self'; default-src 'self'; font-src 'self' data: https://fonts.gstatic.com https://*.wp.com/; frame-src https://www.google.com https://www.youtube.com; img-src * data:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://*.wp.com/; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://*.wp.com/; object-src 'self'; form-action 'self'; frame-ancestors 'self';"

8. Скрываем подробную информацию из заголовков ответа сервера

Замаскируем отображение подробной информации о веб сервере в заголовках. Добавляем параметры:

ServerTokens ProductOnly
ServerSignature Off

Допускается несколько уровней сокрытия:

ServerTokens Full (or not specified)
Server sends (e.g.): Server: Apache/2.4.2 (Unix) PHP/4.2.2 MyMod/1.2

ServerTokens ProductOnly
Server sends (e.g.): Server: Apache

ServerTokens Major
Server sends (e.g.): Server: Apache/2

ServerTokens Minor
Server sends (e.g.): Server: Apache/2.4

ServerTokens Minimal
Server sends (e.g.): Server: Apache/2.4.2

ServerTokens OS
Server sends (e.g.): Server: Apache/2.4.2 (Unix)

Так же мы можем скрыть версию PHP:

Header unset X-Powered-By

Данный параметр удалит из заголовка информацию о версии PHP.

9. Проверка настроек

Проверить результат наших действий можно с помощью сервиса — https://securityheaders.com, вбиваем адрес своего сайта и смотрим результат аудита наших заголовков, тут же нам присвоят некий рейтинг «безопасности» и дадут рекомендации по улучшению.

Так же можно проверить заголовки запросом:

curl -I https://yoursite.ru

Надеюсь это статья поможет повысить безопасность ваших веб серверов и сайтов.