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:
|
|
Для Nginx:
|
|
Ниже приведен пример конфигурационного файла Nginx с добавленным заголовком HTTP Strict Transport Security (HSTS).
|
|
После добавления файла перезапустите веб-сервер, чтобы применить изменения.
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:
|
|
Для Nginx:
|
|
После добавления файла перезапустите веб-сервер, чтобы применить изменения.
Content Security Policy(CSP)
Обеспечивает защиту от XSS (Cross-Site Scripting) и других атак с внедрением кода.
Это делается путем определения разрешенных источников контента, которые позволяют браузеру загружать их.
Существует множество производных, которые могут быть использованы в Content-Security-Policyentry.
Например, приведенные ниже сценарии разрешают содержимое из текущего домена (self)
Для Apache:
|
|
Для Nginx:
|
|
Сохраните изменения и перезагрузите браузер.
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:
|
|
Для Nginx:
|
|
Примените изменения, перезапустив веб-сервер.
Feature-Policy
Разрешает или запрещает использование функций браузера во фрейме или iframe.
Заголовок может быть настроен следующим образом:
Для Apache:
|
|
Для Nginx
|
|
X-Content-Type-Options .
Этот заголовок также известен как защита браузера от сниффинга.
Он используется для указания браузеру следовать типам MIME, указанным в заголовке.
Это помогает уменьшить опасность “попутных” загрузок.
Заголовок может выглядеть следующим образом:
Для Apache:
|
|
Для Nginx:
|
|
Expect-CT
Этот заголовок предотвращает использование любых подозрительных сертификатов.
Он позволяет сайту сообщать и включать требования прозрачности сертификатов.
Когда этот заголовок введен в действие, браузеру предлагается проверить, не появился ли сертификат в публичных журналах CT.
Этот заголовок может быть настроен следующим образом:
Для Apache:
|
|
Для Nginx:
|
|
Permissions-Policy
Это новый заголовок, он используется для контроля API и функций, которые могут быть использованы в браузере.
Этот заголовок может быть включен на веб-сервере, как показано ниже:
Для Apache:
|
|
Для Nginx:
|
|
Сохраните изменения и перезапустите веб-сервер.
Как проверить заголовки безопасности HTTP
Существует множество способов проверки заголовков безопасности HTTP на сайте. Вот некоторые из описанных здесь способов:
Заголовки ответа Chrome DevTools
Это быстрый способ получить доступ к заголовкам безопасности HTTP.
Перейдите в Инструменты разработчика нажав F12.
Находясь здесь, просмотрите заголовки ответов в панели Network.
Нажмите Ctrl + R (Cmd + R), чтобы обновить страницу.
Теперь нажмите на нужный URL и просмотрите заголовки.
Security Headers.com
Это еще один инструмент, который можно использовать для проверки HTTP-заголовков безопасности.
Этот инструмент, разработанный Скоттом Хельме, сканирует и выставляет сайту оценку на основе имеющихся HTTPS-заголовков.
Оценка варьируется от A+ до оценки F.
Чтобы воспользоваться инструментом, нажмите на ссылку SecurityHeaders
Надеюсь, что благодаря вышеизложенной информации ваш результат не будет хуже моего!
Заключение
На этом мы заканчиваем это замечательное руководство.