Заголовки безопасности 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
Надеюсь это статья поможет повысить безопасность ваших веб серверов и сайтов.