🌐 Настройка заголовков безопасности HTTP на сервере Nginx / Apache |

🌐 Настройка заголовков безопасности HTTP на сервере Nginx / Apache

Мануал

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

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

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

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

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

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

Продолжение статьи:

🌐 Заголовки безопасности HTTP – полное руководство

Включение заголовков безопасности 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:

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

Для Nginx

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

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

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;
    }
}

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

2. 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:

Header always set X-Frame-Options "SAMEORIGIN"

Для Nginx:

add_header X-Frame-Options "SAMEORIGIN";

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

3. Content Security Policy(CSP)

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

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

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

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

Для Apache.

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

Для Nginx.

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

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

4. 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

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

Для Nginx.

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

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

5. Feature-Policy

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

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

Для Apache:

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

Для Nginx

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

6. X-Content-Type-Options .

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

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

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

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

Для Apache:

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

Для Nginx:

X-Content-Type-Options: nosniff

7. Expect-CT

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

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

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

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

Для Apache

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

Для Nginx.

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

8. Permissions-Policy

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

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

Для Apache:

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

Для Nginx.

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

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

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

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

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

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

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

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

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

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

2. Security Headers.io

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

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

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

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

Заключение

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

На данный момент вы можете усилить безопасность своего сайта, используя знания, полученные на этом сайте.

см. также:

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий

  1. Игорь

    Привет, в каком файле править заголовки?

    Ответить
    1. cryptoparty автор

      Привет, апач или энджинкс?

      Ответить