Как настроить 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 прописаны со значениями их важности для сайтов. И при аудите вы видите, сколько процентов, а главное каких заголовков, вам не хватает, чтобы ваш сайт был безопасным. Знаете такой ресурс?

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

А что это дает? Ну ваши заголовки? Наверно 70% пользователей, даже не знают о том, что на сайте обязательно должен быть сертификат безопасности SSL, и настроен протокол передачи данных HTTPS. Из оставшихся 30%, примерно 90% не знают про HTTP Headers заголовки... А компьютеру и браузеру пользователя, вообще плевать на ваши заголовки: если на сайте не обнаружено откровенно подозрительных скриптов - он не станет блокировать посещение данного ресурса. На скрине - проверка страницы, которая уже больше года уверенно держит топ 1-3 в Яндекс и Google. Так для чего нужны эти заголовки? Просто "чтобы было"? И какая корреляция данных заголовков с SEO (вы же разместили статью в разделе SEO)? Если хотите, я вам еще несколько десятков примеров сайтов приведу, где все УЖАСНО по HTTP Headers, но отлично по позициям и трафику.

1

1. Про SSL.

Мне кажется, про SSL понимают почти все или почти все, от менеджеров бизнес до владельцев, об этом слышали.

2. Про сайты в Топ без заголовков.

Такое нередкость. На ру рынке низкая конкуренция среди бизнеса в большинстве ниш. В условиях низкой конкуренции люди делают некачественный продукт. В нашем случае, этим пользуются seo и забивают на безопаность своих пользателей и своего сайта, но стоят Топ-1. Делает ли это сайт лучше - нет. А если бы, сайт не был Топ-1, но был безопасным, делало бы это сайт лучше? Для пользователя - да.

Вопрос, не в том, как быть высоко там, где нет конкуренции. А в том, чтобы делать качество согласно стандатам от тех же ПС.

3. Что это даёт?

У меня есть пример с сайтом, который я вывел в Топ. И он был подвержен xss атаке. Я говорю владельцу сайта, давайте сделаем настройку безопасности (в том числе HTTP headers). В ответ: "Да нет, с чего ты взял, что это так работает". Проходит полгода, я снова его вывожу на прежние позиции. Бабах, снова xss. Владелец сам приходит и говорит: "Ну что мне делать, ты вроде предлагал?". Отдал ему готовое ТЗ - сделали. Ни одной атаки за 2 года.

4. Как влияет?

В большинстве ниш, используется скоринг сайтов для примерной оценки, условного, качества сайтов. Вам это не поможет, будучи Топ-2, конкурировать с Топ-1, т.к. важность приобретают другие факторы. Но, если вы Топ-10, доп.фактор, чтобы перемахнуть через несколько своих конкурентов, поможет.

4

"Знаете такой ресурс?" - ну не томите же.

1

Тут то вы меня и подловили. Я переносил вкладки на рабочих ПК и забыл перенести эту вкладку. И думаю, дай закину вопросом к статье, чтобы мне напомнили. Уже 1,5 часа не могу сам найти эту золотую жилу. Этот сайт не нагуглишь. Ждём, пока вспомню))

Блин, спасибо за совет. У меня на сайте https://russian-sports.ru/ были заголовки в F, за 2-е минуты добавил код .htaccess блок заголовков безопасности после строки «# END WordPress»:
# Заголовки безопасности
Header always set Strict-Transport-Security: "max-age=31536000" env=HTTPS
Header always set Content-Security-Policy "upgrade-insecure-requests"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set Expect-CT "max-age=7776000, enforce"
Header always set Referrer-Policy: "no-referrer-when-downgrade"
Header always set X-Frame-Options SAMEORIGIN
# Конец заголовков безопасности

И все стало зелененьким. Благодарю за инфу ;)