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

Нужные HTTP-заголовки

Наши клиенты в Fastly любят манипулировать заголовками HTTP. Подбор правильной комбинации заголовков — одна из лучших вещей, какую вы можете сделать для безопасности своего сайта и значительного вклада в его производительность.

Большинство разработчиков знают о важных и нужных HTTP-заголовках. Самые известные — Content-Type и Content-Length , это почти универсальные хедеры. Но в последнее время для повышения безопасности начали использоваться заголовки вроде Content-Security-Policy и Strict-Transport-Security , а для повышения производительности — Link rel=preload . Несмотря на широкую поддержку в браузерах, лишь немногие их используют.

В предыдущей статье мы рассмотрели ненужные заголовки. Сейчас разберёмся, какие заголовки действительно следует настроить для своего сайта.

Домашняя работа

В интернете есть несколько сервисов, которые проанализируют ваш сайт и посоветуют, какие заголовки добавить. Я посмотрел securityheaders.io и Observatory от Mozilla, чтобы дополнить собственные знания и данные, полученные из сети Fastly.

Какие заголовки должны быть на вашем сайте

Итак, какие основные заголовки должны быть в ответах ваших серверов? Бóльшая часть отвечает за повышение безопасности:

Content-Security-Policy. Действует как файрвол в браузере. Если ваш сайт скомпрометирован, помогает ограничить ущерб, предотвращая подключения к неодобренным хостам. Очень важный заголовок. Если у вас его нет, нужно включить.

Referrer-Policy. Настраивает уровень детализации для включения в заголовок Referer при уходе со страницы. Помогает предотвратить утечку данных на сайты, куда идут ссылки. Настоятельно рекомендуется.

Strict-Transport-Security. Предотвращает любые попытки подключения к сайту по обычному HTTP. Помогает остановить MiTM-атаки и повышает безопасность сайта. Тоже настоятельно рекомендуется.

X-XSS-Protection. Предотвращает некоторые формы атак межсайтового скриптинга, предотвращая выполнение скрипта, если какая-то разметка из документа в той же форме присутствует в запросе. Например, если вы загружаете страницу с адресом /index.html?foo= , а в исходном коде страницы есть , то скрипт блокируется. В наши дни заголовок во многом замещается CSP.

X-Content-Type-Options. Установите значение nosniff , чтобы запретить браузерам выполнение контента, похожего на JavaScript, для которого не установлено правильное значение типа контента. Предотвращает атаки типа смешения MIME, а в последнее время используется Chrome для активации изоляции сайта. Со временем становится менее важным из-за улучшения поведения браузеров по умолчанию, но в настоящее время по-прежнему входит в число лучших практик.

CORS. Заголовки Cross-Origin Resource Sharing позволяют загружать URL скриптом с другого источника. Это необязательный заголовок. Заголовки такого типа являются разрешающими, а не запрещающими, поэтому их отсутствие даёт максимальный уровень безопасности.

Другие предназначены для производительности:

Timing-Allow-Origin. Даёт инструментам мониторинга доступ к данным по таймингу запроса. Это во многом отношении ценная информация, она позволяет сильно улучшить качество аналитики вроде Google Analytics или Speedcurve.

Link rel=preload. Сообщает браузеру о критических ресурсах, которые следует скачать, даже если непосредственной необходимости в них ещё не возникло. Используйте заголовок для шрифтов и важных CSS.

Server-Timing. Предоставляет с сервера информацию по таймингу, которая дополняет Navigation Timing API и Resource Timing API более детальной информацией о времени выполнения задач на сервере (например, «сколько времени мы провели в MySQL»). Отлично подходит для мониторинга данных о производительности, в сочетании с инструментами RUM Beacon.

Давайте более подробно рассмотрим некоторые из них.

Content Security Policy: держите его в рамках

Хотя Content-Security-Policy — один из самых важных заголовков, он также один из самых многословных. Самый большой заголовок CSP, который я нашёл в HTTPArchive, занимал 10 КБ. Десять килобайт. Для одного значения заголовка. Хуже того: в то время как тела ответов могут передаваться потоком, заголовки буферизуются большинством серверов и прокси-серверов и передаются только после завершения. Сжатие HTTP/2 немного помогает запоминать их между запросами, но это не означает, что заголовок 10 КБ — это нормально.

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

Referrer-Policy

С незапамятных времён (то есть в веб-мире примерно с конца 90-х) браузеры отправляют (и неправильно пишут) заголовок Referer . На протяжении большей части своей истории это был один из самых важных способов отслеживать перемещения пользователей между страницами в инструментах аналитики, а также понять происхождение входящего трафика. Тем не менее, последнее связано со значительными проблемами конфиденциальности. Если я нажму ссылку в письме из клиента электронной почты, то сайт может определить мой домен электронной почты. Хуже того, знание полного URL-адреса, с которого вы пришли, включая аргументы запроса, может раскрыть термины вашего последнего поискового запроса или личные данные, такие как адрес электронной почты.

Читайте также:  Как настроить герц мыши

Можете выбрать несколько стратегий из доступных вариантов Referrer-Policy, но мой обычный совет — это “origin-when-cross-origin”, который включает Referer для всех нормальных запросов, но усекает значение только до домена, если ссылка идёт от одного домена к другому. Ссылки в пределах вашего собственного сайта включают полный реферер.

Измерение Server-Timing на edge-сервере CDN

У Server-Timing есть много приятных особенностей, а одна из них в том, что в ответ можете добавить несколько экземпляров — и все они объединятся в браузере или инструменте RUM. То есть если запрос проходит через несколько этапов серверной обработки — как это происходит в CDN — каждый этап добавляет собственные метрики времени, и они не конфликтуют между собой. Вот как добавить метрики Fastly в заголовок с помощью VCL в конфигурации службы Fastly:

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

Метрики времени сервера доступны через объект performance в JavaScript и отображаются в сетевой панели Chrome Devtools:

В настоящее время визуализация показателей на рудиментарном уровне. Но над этим усиленно работают, так что в будущем пользовательский интерфейс, вероятно, значительно улучшится.

Добавляем все правильные заголовки

Fastly — хорошее место для добавления всех заголовков безопасности и производительности. Ниже показано, как они выглядит все вместе. Добавьте этот код на этапе доставки (deliver) потока запросов, изменив значения на те, которые подходят для вашего сайта (постарайтесь не копипастить без проверки, что значения подходят для вашего сайта):

В следующей статье рассмотрим некоторые из самых экзотических заголовков, которые начинают стандартизировать и внедрять в браузеры.

Источник

Настройка заголовков ответов безопасности HTTP с помощью AD FS 2019

Чтобы защититься от распространенных уязвимостей системы безопасности и предоставить администраторам возможность воспользоваться последними улучшениями в механизмах защиты на основе браузера, AD FS 2019 добавила функции для настройки заголовков ответа безопасности HTTP, отправленных AD FS. Это достигается за счет появления двух новых командлетов: Get-AdfsResponseHeaders и Set-AdfsResponseHeaders .

Функциональные возможности настройки заголовков ответа HTTP-безопасности (кроме заголовков CORS) с помощью командлетов Get-AdfsResponseHeaders и Set-AdfsResponseHeaders были относиться к AD FS 2016. Вы можете добавить функциональные возможности в AD FS 2016, установив KB4493473 и KB4507459.

В этом документе мы обсудим часто используемые заголовки ответов безопасности, чтобы продемонстрировать, как настраивать заголовки, отправленные AD FS 2019.

В документе предполагается, что AD FS 2019 установлен.

Прежде чем обсуждать заголовки, рассмотрим несколько сценариев, создающих необходимость в настройке заголовков безопасности администраторами.

Сценарии

  1. Администратор включил протокол HTTP с параметром HTTPS-Security (HSTS) (принудительно устанавливает все подключения по протоколу SSL), чтобы защитить пользователей, которые могут получить доступ к веб-приложению, с помощью протокола HTTP из общедоступной точки доступа WiFi, которая может быть взломана. Они хотели бы усилить безопасность, включив HSTS для поддоменов.
  2. Администратор настроил заголовок ответа X-Frame-Options (не позволяет отображать веб-страницы в iframe) для защиты веб-страниц от кликкжаккед. Однако им нужно настроить значение заголовка из-за нового бизнес-требования для показа данных (в iFrame) из приложения с другим источником (доменом).
  3. Администратор включил защиту X-XSS-Protection (предотвращает атаки с использованием сценариев), чтобы очистить и заблокировать страницу, если браузер обнаруживает атаки с использованием сценариев. Однако им нужно настроить заголовок, чтобы Страница загружалась после очистки.
  4. Администратор должен включить общий доступ к ресурсам в разных источниках (CORS) и задать источник (домен) на AD FS, чтобы разрешить одностраничному приложению доступ к веб-API с другим доменом.
  5. Администратор включил заголовок «политика безопасности содержимого» (CSP) , чтобы предотвратить атаки межсайтовых сценариев и внедрения данных путем запрещения запросов между доменами. Однако из-за новых бизнес-требований им нужно настроить заголовок, чтобы разрешить веб-странице загружать изображения из любого источника и ограничивать носители доверенными поставщиками.
Читайте также:  Как настроить триммер бензиновый для травы

Заголовки ответа безопасности HTTP

Заголовки ответов включаются в исходящий HTTP-ответ, который отправляется AD FS в браузер. Заголовки могут быть перечислены с помощью Get-AdfsResponseHeaders командлета, как показано ниже.

ResponseHeaders Атрибут на приведенном выше снимке экрана определяет заголовки безопасности, которые будут включаться в AD FS в каждом HTTP-ответе. Заголовки ответов будут отправляться, только если ResponseHeadersEnabled для задано True значение (по умолчанию). Можно задать значение, чтобы False предотвратить AD FS, включая любые заголовки безопасности в HTTP-ответе. Однако это не рекомендуется. Для этого используйте следующую команду:

HTTP-протокол HTTPS — безопасность (HSTS)

HSTS — это механизм политики веб-безопасности, который помогает снизить атаки на понижение уровня протокола и захват файлов cookie для служб, которые имеют конечные точки HTTP и HTTPS. Он позволяет веб-серверам объявлять, что веб-браузер (или другие агенты пользователя) должны взаимодействовать с ним только с помощью протокола HTTPS и никогда через протокол HTTP.

Все конечные точки AD FS для трафика веб-проверки подлинности открываются исключительно по протоколу HTTPS. В результате AD FS эффективно устраняет угрозы, предоставляемые механизмом политики безопасности транспортного протокола HTTP (по умолчанию нет перехода на более раннюю версию HTTP, так как в HTTP нет прослушивателей). Заголовок можно настроить, задав следующие параметры:

  • max-age = — время окончания срока действия (в секундах) указывает, как долго сайт должен быть доступен только по протоколу HTTPS. По умолчанию и рекомендуемое значение — 31536000 секунд (1 год).
  • includeSubDomains — это необязательный параметр. Если указано, правило HSTS применяется также ко всем поддоменам.

Настройка HSTS

По умолчанию заголовок включен и имеет max-age значение 1 год; Однако администраторы могут изменять max-age (не рекомендуется использовать меньшее значение максимального срока) или включить HSTS для поддоменов с помощью Set-AdfsResponseHeaders командлета.

По умолчанию заголовок включается в атрибут, ResponseHeaders Однако администраторы могут удалить заголовок с помощью Set-AdfsResponseHeaders командлета.

Параметры X-кадра

По умолчанию AD FS не позволяет внешним приложениям использовать iFrames при выполнении интерактивных входов. Это делается для предотвращения определенного стиля фишинговых атак. Обратите внимание, что неинтерактивные имена входа можно выполнять через iFrame из-за установленной безопасности на уровне сеанса.

Однако в некоторых редких случаях вы можете доверять конкретному приложению, которое требует интерактивного AD FS для входа с помощью iFrame. Для этой цели используется заголовок «X-Frame-Options».

Заголовок ответа безопасности HTTP используется для связи с браузером, может ли он отображать страницу в / . Для заголовка можно задать одно из следующих значений:

  • Deny — страница в кадре не будет отображаться. Это значение по умолчанию, которое рекомендуется использовать.
  • самеоригин — страница будет отображаться в рамке только в том случае, если она совпадает с исходной для веб-страницы. Этот параметр не очень удобен, если все предки также находятся в одном источнике.
  • Разрешить-от — Страница будет отображаться в рамке только в том случае, если источник (например, https://www .) com) соответствует конкретному источнику в заголовке. Это может быть реализовано в ограниченных браузерах.

Настройка параметров кадра X

По умолчанию заголовку будет присвоено значение Deny; Однако администраторы могут изменить значение с помощью Set-AdfsResponseHeaders командлета.

По умолчанию заголовок включается в атрибут, ResponseHeaders Однако администраторы могут удалить заголовок с помощью Set-AdfsResponseHeaders командлета.

Защита X-XSS-Protection

Заголовок ответа безопасности HTTP используется для того, чтобы предотвратить загрузку веб-страниц при обнаружении атак с использованием межсайтовых сценариев (XSS) в браузерах. Это называется фильтрацией XSS. Для заголовка можно задать одно из следующих значений:

  • 0 — отключает фильтрацию XSS. Не рекомендуется.
  • 1 — включает фильтрацию XSS. Если обнаружена атака XSS, браузер будет очистить страницу.
  • 1; Mode = Block — включает фильтрацию XSS. Если обнаружена атака XSS, браузер не будет отображать страницу. Это значение по умолчанию, которое рекомендуется использовать.

Настройка защиты X-XSS-Protection

По умолчанию для заголовка задается значение 1; Mode = Block; Однако администраторы могут изменить это значение с помощью Set-AdfsResponseHeaders командлета.

По умолчанию заголовок включается в ResponseHeaders атрибут, однако администраторы могут удалить заголовок с помощью Set-AdfsResponseHeaders командлета.

Заголовки общего доступа к ресурсам в разных источниках (CORS)

Безопасность веб-браузера не позволяет веб-страницам делать запросы между источниками, инициированные из скриптов. Однако иногда может потребоваться доступ к ресурсам в других источниках (доменах). CORS — это стандарт консорциума W3C, позволяющий серверу ослабить политику того же источника. С помощью CORS сервер может явным образом разрешить некоторые запросы независимо от источника, а другие — отклонить.

Читайте также:  Акселерометр андроид не работает

Чтобы лучше понять запрос CORS, пошаговым руководством является ситуация, когда одностраничное приложение (SPA) должно вызывать веб-API с другим доменом. Кроме того, давайте рассмотрим, что как SPA, так и API настроены в ADFS 2019 и AD FS включили CORS, т. е. AD FS может определить заголовки CORS в HTTP-запросе, проверить значения заголовков и включить в ответ соответствующие заголовки CORS (сведения о том, как включить и настроить CORS для AD FS 2019 в разделе настройки CORS ниже). Пример последовательности:

Пользователь получает доступ к SPA через браузер клиента и перенаправляется на конечную точку проверки подлинности AD FS. Так как SPA настроена для неявного потока предоставления, запрос возвращает в браузер маркер доступа и идентификатора после успешной проверки подлинности.

После проверки подлинности пользователя клиентский сценарий JavaScript, входящий в SPA, делает запрос на доступ к веб-API. Запрос перенаправляется в AD FS со следующими заголовками:

  • Параметры — описание параметров связи для целевого ресурса.
  • Источник — включает источник веб-API.
  • Access-Control-Request-Method — определяет метод HTTP (например, DELETE), который будет использоваться при выполнении фактического запроса.
  • Access-Control-request-headers — определяет заголовки HTTP, которые будут использоваться при выполнении фактического запроса.

Запрос CORS напоминает стандартный HTTP-запрос, однако присутствие заголовка источника сигнализирует, что входящий запрос является CORS связанным.

AD FS проверяет, входит ли источник веб-API, включенный в заголовок, в список доверенных источников, настроенных в AD FS (см. сведения о том, как изменить Доверенные источники в разделе настройки CORS ниже). AD FS затем отвечает на следующие заголовки:

  • Доступ — управление-разрешить-Origin — значение, аналогичное значению в заголовке источника
  • Доступ-Control-Allow-method — значение, аналогично значению заголовка Access-Control-Request-Method.
  • Доступ-Control-Allow-Headers-value совпадает с заголовком Access-Control-request-headers

Браузер отправляет фактический запрос, включая следующие заголовки:

  • Метод HTTP (например, DELETE)
  • Источник — включает источник веб-API.
  • Все заголовки, включаемые в заголовок ответа Access-Control-Allow-Headers

После проверки AD FS утверждает запрос, включая домен веб-API (источник) в заголовке ответа Access-Control-Allow-Origin.

Включение заголовка Access-Control-Allow-Origin позволит браузеру перейти к вызову запрошенного API.

Настройка CORS

По умолчанию функции CORS не будут включены. Однако администраторы могут включить эту функцию с помощью командлета Set-AdfsResponseHeaders.

Один включен, администраторы смогут перечислить список доверенных источников с помощью того же командлета. Например, следующая команда разрешит запросы CORS из источников https://example1.com и HTTPS://example1.com.

Администраторы могут разрешать запросы CORS из любого источника, включая «*» в список доверенных источников, хотя этот подход не рекомендуется из-за уязвимостей системы безопасности, и предупреждающее сообщение предоставляется при выборе.

Политика безопасности содержимого (CSP)

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

Настройка CSP

Настройка заголовка CSP включает изменение политики безопасности, определяющей, что браузер ресурсов может загружать веб-страницу. Политика безопасности по умолчанию —

Content-Security-Policy: default-src ‘self’ ‘unsafe-inline’ ‘’unsafe-eval’; img-src ‘self’ data:;

Директива Default-src используется для директивы Modify-src , не перечисляя каждую директиву явным образом. Например, в приведенном ниже примере политика 1 совпадает с политикой 2.

Если директива указана явно, указанное значение переопределяет значение, заданное для Default-src. В приведенном ниже примере img-src принимает значение «*» (что позволяет загружать изображения из любого источника), а другие директивы src принимают значение как «Self» (с максимальным приоритетом на тот же источник, что и веб-страница).

Для политики по умолчанию-src можно определить следующие источники:

  • «Self» — задает ограничение источника содержимого для загрузки в начало веб-страницы
  • «unsafeed-inline» — указание этого параметра в политике позволяет использовать встроенные сценарии JavaScript и CSS
  • «unsafe-eval» — указание этого параметра в политике позволяет использовать текст в механизмах JavaScript, таких как eval
  • «None» — задает ограничение содержимого от любого источника до загрузки
  • данные: указание данных: URI позволяет создателям содержимого внедрять небольшие файлы встроенными в документы. Использование не рекомендуется.

AD FS использует JavaScript в процессе проверки подлинности и, таким образом, включает JavaScript, включая источники «unsafe-inline» и «unsafe-eval» в политике по умолчанию.

Настраиваемые заголовки

Помимо указанных выше заголовков ответа безопасности (HSTS, CSP, X-Frame-Options, X-XSS-Protection и CORS), AD FS 2019 предоставляет возможность установки новых заголовков.

Пример. Установка нового заголовка «Тессеадер» со значением «Тессеадервалуе»

После установки новый заголовок отправляется в ответе AD FS (приведенном ниже фрагменте кода Fiddler).

Совместимость с веб-браузерами

Используйте следующую таблицу и ссылки, чтобы определить, какие веб-браузеры совместимы с каждым из заголовков ответа безопасности.

Источник

Оцените статью