Как настроить HTTP Headers

HTTP Headers транслируют браузеру и компьютеру пользователя, насколько безопасным является веб-ресурс. Наличие таких настроенных HTTP заголовков повышает безопасность и повышает траст сайта в глазах ПС.

Как правило, стандартная ситуация после анализа HTTP Headers неудовлетворительная для 90% ресурсов в ру сегменте. И выглядит она примерно так:

Все заголовки не настроены, либо настроен только HSTS
Все заголовки не настроены, либо настроен только HSTS

Если проверка наличия HTTP заголовков показала, что сервером не отдаются важные HTTP Headers, требуется внести коррективы.

Итак, пойдём от основного

1. Должен быть настроен HSTS. Т.е. подключение к вашему сайту и передача данных осуществляется только по безопасному протоколу. Настройка данного заголовка полностью избавляет нас от возможных подключений через http.

"Strict-Transport-Security: max-age=31536000; includeSubDomains"

2. Пропишите CSP (Content-Security-Policy). Настроенный CSP поможет предотвратить определенные типы атак, включая XSS атаки и атаки с распространением вредоносных данных и вирусных программ.

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

Стандартные значения для выполнения условий:

"Content-Security-Policy: script-src ‘self’"

или *Content-Security-Policy: upgrade-insecure-requests

3. X-XSS-Protection. Защита от XSS (cross site scripting) атак

"X-XSS-Protection: 1; mode=block"

4. X-Frame-Options. Нужен, чтобы не предоставлять доступ злоумышленникам к демонстрации по средствам iframe, но при установлении заголовка не забывайте, что есть и полезные программы, которые используют ваши iframe.

Здесь я советую устанавливать значение заголовку "X-Frame-Options: SAMEORIGIN" и добавлять исключения. Ниже пример для исключения Яндекс.Метрики.

location / { set $frame_options ''; if ($http_referer !~ '^https?:\/\/([^\/]+\.)?(yourdomain\.com|webvisor\.com|metri[ck]a\.yandex\.(com|ru|com\.tr))\/'){ set $frame_options 'SAMEORIGIN'; } add_header X-Frame-Options $frame_options; ... }

5. X-Content-Type-Options. Не до конца понимаю, кому и как нужно изменять и интерпретировать данные на сайтах. Однако, понятно, что это может привести к "поломке" сайта. Если хотите обезопасить себя от демонстрации пустого экрана вашим пользователям, то установите

X-Content-Type-Options: nosniff

6. Referrer-Policy.

"Referrer-Policy: no-referrer-when-downgrade"

7. Определите значения для Cookies

Set-Cookie: <cookie-name>=<cookie-value> | Expires=<date> | Max-Age=<non-zero-digit> | Domain=<domain-value> | Path=<path-value> | SameSite=Strict|Lax|none

Какие бы значения для Cookie вы не присваивали и хранили, не забывайте в конце "HTTPOnly; Secure".

Приведённых значений вам хватит, чтобы получить высшую оценку и соответствовать, всем требования ПС в части безопасности.

Как настроить HTTP Headers

Если вы захотите ещё поработать с безопасностью сайта, то дальше обратите своё внимание на такие заголовки как:

  • Public Key Pinning
  • Feature-Policy
  • Access-Control-Allow

P.S. Есть ресурс, где все значения для HTTP Headers прописаны со значениями их важности для сайтов. И при аудите вы видите, сколько процентов, а главное каких заголовков, вам не хватает, чтобы ваш сайт был безопасным. Знаете такой ресурс?

11
10 комментариев