HTTP-заголовки играют важную роль в безопасности сайта.

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

Когда посещается веб-сайт, браузер запрашивает страницу у веб-сервера.

В ответ сервер отправляет содержимое с заголовками HTTP-ответа.

Эти заголовки содержат несколько данных, таких как Cache-Control, Content-Encoding, коды состояния и т.д.

Собранная информация из заголовков может помочь вам описать коммуникацию и, следовательно, улучшить безопасность вашего сайта.

Включение заголовков безопасности HTTP в сервере Nginx / Apache HTTPD.

Заголовки безопасности HTTP, которые будут рассмотрены в этом руководстве, следующие:

  • HTTP Strict Transport Security (HSTS)
  • Content Security Policy (CSP)
  • X-Frame-Options
  • X-XSS-Protection
  • X-Content-Type-Options
  • Feature-Policy
  • Permissions-Policy
  • Expect-CT

Эти заголовки могут быть применены глобально или к конкретному сайту в файле виртуального хоста Nginx/Apache путем добавления HTTP Security Headers в блок Server.

Для Apache:

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

Для Nginx:

1
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';

Ниже приведен пример конфигурационного файла Nginx с добавленным заголовком HTTP Strict Transport Security (HSTS).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
upstream portal {
    server localhost:8080;
}
server {
listen 80;
   server_name portal.test;
   add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';
   location / {
        proxy_pass http://portal;
    }
}

После добавления файла перезапустите веб-сервер, чтобы применить изменения.

X-Frame-Options

Этот заголовок защищает сайт от атак clickjacking, отключая iframe на вашем сайте.

Он сообщает браузеру, можно ли встраивать ваш сайт в iframe или нет.

В настоящее время он поддерживается в Chrome 4.1+, Firefox 3.6.9+, IE 8+, Safari 4+ и Opera 10.5+.

Обычно существует 3 способа настройки этого заголовка. Это:

  • DENY – этот вариант полностью отключает функции iframe.
  • SAMEORIGIN – позволяет использовать функции iframe всем, кто имеет одинаковое происхождение.
  • ALLOW-FROM – разрешает использование функции iframe с определенных URL-адресов.

Ниже показано, как может быть настроен заголовок X-Frame-Options.

Для Apache:

1
Header always set X-Frame-Options "SAMEORIGIN"

Для Nginx:

1
add_header X-Frame-Options "SAMEORIGIN";

После добавления файла перезапустите веб-сервер, чтобы применить изменения.

Content Security Policy(CSP)

Обеспечивает защиту от XSS (Cross-Site Scripting) и других атак с внедрением кода.

Это делается путем определения разрешенных источников контента, которые позволяют браузеру загружать их.

Существует множество производных, которые могут быть использованы в Content-Security-Policyentry.

Например, приведенные ниже сценарии разрешают содержимое из текущего домена (self)

Для Apache:

1
Header always set Content-Security-Policy "default-src 'self'; font-src *;img-src * data:; script-src *; style-src *;"

Для Nginx:

1
add_header Content-Security-Policy "default-src 'self'; font-src *;img-src * data:; script-src *; style-src *";

Сохраните изменения и перезагрузите браузер.

X-XSS-Protection

Заголовок X-XSS-Protection/Cross-Site Scripting используется для защиты сайта от атак путем включения фильтра межсайтового скриптинга (XSS).

Эта функция включена по умолчанию в современных браузерах, таких как Safari, Internet Explorer 8+ и Google Chrome.

Этот заголовок обычно предотвращает загрузку страницы при обнаружении атак межсайтового скриптинга (XSS).

Заголовок может быть реализован следующими способами:

  • X-XSS-Protection: 0 – полностью отключает фильтр.
  • X-XSS-Protection: 1 – обеспечивает соблюдение заголовка, но только санирует потенциально вредоносные скрипты.
  • X-XSS-Protection: 1; mode=block – применяет функцию и полностью блокирует страницу.

Эта функция может быть включена на вашем веб-сервере путем добавления нужной реализации в блок вашего сервера. Например:

Для Apache:

1
Header always set X-XSS-Protection "1; mode=block"

Для Nginx:

1
add_header X-XSS-Protection "1; mode=block" always;

Примените изменения, перезапустив веб-сервер.

Feature-Policy

Разрешает или запрещает использование функций браузера во фрейме или iframe.

Заголовок может быть настроен следующим образом:

Для Apache:

1
add_header Feature-Policy "autoplay 'none'; camera 'none'" always;

Для Nginx

1
header always set Feature-Policy "autoplay 'none'; camera 'none'"

X-Content-Type-Options .

Этот заголовок также известен как защита браузера от сниффинга.

Он используется для указания браузеру следовать типам MIME, указанным в заголовке.

Это помогает уменьшить опасность “попутных” загрузок.

Заголовок может выглядеть следующим образом:

Для Apache:

1
header always set X-Content-Type-Options "nosniff"

Для Nginx:

1
X-Content-Type-Options: nosniff

Expect-CT

Этот заголовок предотвращает использование любых подозрительных сертификатов.

Он позволяет сайту сообщать и включать требования прозрачности сертификатов.

Когда этот заголовок введен в действие, браузеру предлагается проверить, не появился ли сертификат в публичных журналах CT.

Этот заголовок может быть настроен следующим образом:

Для Apache:

1
header always set Expect-CT "max-age=604800, enforce, report-uri="https://www.example.com/report"

Для Nginx:

1
add_header Expect-CT "max-age=604800, enforce, report-uri='https://www.example.com/report' always;

Permissions-Policy

Это новый заголовок, он используется для контроля API и функций, которые могут быть использованы в браузере.

Этот заголовок может быть включен на веб-сервере, как показано ниже:

Для Apache:

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

Для Nginx:

1
add_header Permissions-Policy "geolocation=(),midi=(),sync-xhr=(),microphone=(),camera=(),magnetometer=(),gyroscope=(),fullscreen=(self),payment=()";

Сохраните изменения и перезапустите веб-сервер.

Как проверить заголовки безопасности HTTP

Существует множество способов проверки заголовков безопасности HTTP на сайте. Вот некоторые из описанных здесь способов:

Заголовки ответа Chrome DevTools

Это быстрый способ получить доступ к заголовкам безопасности HTTP.

Перейдите в Инструменты разработчика нажав F12.

Находясь здесь, просмотрите заголовки ответов в панели Network.

Нажмите Ctrl + R (Cmd + R), чтобы обновить страницу.

Теперь нажмите на нужный URL и просмотрите заголовки.

Security Headers.com

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

Этот инструмент, разработанный Скоттом Хельме, сканирует и выставляет сайту оценку на основе имеющихся HTTPS-заголовков.

Оценка варьируется от A+ до оценки F.

Чтобы воспользоваться инструментом, нажмите на ссылку SecurityHeaders

Надеюсь, что благодаря вышеизложенной информации ваш результат не будет хуже моего!

Заключение

На этом мы заканчиваем это замечательное руководство.