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

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

Примечание.

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

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

Примечание.

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

Сценарии

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

  • Администратор включил HTTP Strict-Transport-Security (HSTS) для защиты пользователей, которые могут получить доступ к веб-приложению с помощью HTTP из общедоступной точки доступа wi-fi, которая может быть взломана. HSTS принудительно выполняет все подключения по протоколу HTTPS. Они хотели бы еще больше укрепить безопасность, включив HSTS для поддоменов.
  • Администратор настроил заголовок ответа X-Frame-Options , чтобы защитить веб-страницы от щелчка. X-Frame-Options запрещает отрисовку любой веб-страницы в iFrame. Однако они должны настроить значение заголовка из-за нового бизнес-требования для отображения данных (в iFrame) из приложения с другим источником (доменом).
  • Администратор включил X-XSS-Protection для очистки и блокировки страницы, если браузер обнаруживает перекрестные атаки на скрипты. X-XSS-Protection предотвращает перекрестные атаки на скрипты. Однако они должны настроить заголовок, чтобы разрешить загрузку страницы после его очистки.
  • Администратору необходимо включить общий доступ к ресурсам между источниками (CORS) и задать источник (домен) в AD FS, чтобы разрешить одностраничному приложению доступ к веб-API с другим доменом.
  • Администратор istrator включил заголовок политики безопасности содержимого (CSP), чтобы предотвратить атаки на межсайтовые сценарии и внедрение данных, разрешая любые запросы между доменами. Однако из-за нового бизнес-требования они должны настроить заголовок, чтобы разрешить веб-странице загружать изображения из любого источника и ограничивать носитель доверенным поставщикам.

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

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

Screenshot that shows the PowerShell output from Get-AdfsResponseHeaders.

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

Set-AdfsResponseHeaders -EnableResponseHeaders $false

HTTP Strict-Transport-Security (HSTS)

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

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

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

Настройка HSTS

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

Set-AdfsResponseHeaders -SetHeaderName "Strict-Transport-Security" -SetHeaderValue "max-age=<seconds>; includeSubDomains"

Пример:

Set-AdfsResponseHeaders -SetHeaderName "Strict-Transport-Security" -SetHeaderValue "max-age=31536000; includeSubDomains"

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

Set-AdfsResponseHeaders -RemoveHeaders "Strict-Transport-Security"

X-Frame-Options

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

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

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

  • запретить. Страница в кадре не отображается. Эта конфигурация используется по умолчанию и рекомендуется.
  • sameorigin. Страница отображается только в кадре, если источник совпадает с источником веб-страницы. Вариант не полезен, если только все предки также находятся в одном и том же источнике.
  • allow-from <указанного источника>. Страница отображается только в кадре, если источник (например, https://www.".com) соответствует конкретному источнику в заголовке. Некоторые браузеры могут не поддерживать этот параметр.

Настройка X-Frame-Options

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

Set-AdfsResponseHeaders -SetHeaderName "X-Frame-Options" -SetHeaderValue "<deny/sameorigin/allow-from<specified origin>>"

Пример:

Set-AdfsResponseHeaders -SetHeaderName "X-Frame-Options" -SetHeaderValue "allow-from https://www.example.com"

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

Set-AdfsResponseHeaders -RemoveHeaders "X-Frame-Options"

X-XSS-Protection

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

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

Настройка X-XSS-Protection

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

Set-AdfsResponseHeaders -SetHeaderName "X-XSS-Protection" -SetHeaderValue "<0/1/1; mode=block/1; report=<reporting-uri>>"

Пример:

Set-AdfsResponseHeaders -SetHeaderName "X-XSS-Protection" -SetHeaderValue "1"

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

Set-AdfsResponseHeaders -RemoveHeaders "X-XSS-Protection"

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

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

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

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

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

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

    Примечание.

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

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

    • Access-Control-Allow-Origin — значение, аналогичное значению заголовка Источника.
    • Access-Control-Allow-Method — значение, аналогичное заголовку метода Access-Control-Request-Method.
    • Access-Control-Allow-Headers — значение, аналогичное заголовку Access-Control-Request-Headers.
  4. Браузер отправляет фактический запрос, включая следующие заголовки:

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

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

Настройка CORS

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

Set-AdfsResponseHeaders -EnableCORS $true

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

Set-AdfsResponseHeaders -CORSTrustedOrigins https://example1.com,https://example2.com

Примечание.

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

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

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

Настройка CSP

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

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

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

Политика 1

Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "default-src 'self'"

Политика 2

Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "script-src 'self'; img-src 'self'; font-src 'self';
frame-src 'self'; manifest-src 'self'; media-src 'self';"

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

Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "default-src 'self'; img-src *"

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

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

Примечание.

AD FS использует JavaScript в процессе проверки подлинности и поэтому включает JavaScript, включив в политику по умолчанию источники небезопасных и небезопасных.

Custom headers

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

Например, можно задать новый заголовок TestHeader и TestHeaderValue в качестве значения.

Set-AdfsResponseHeaders -SetHeaderName "TestHeader" -SetHeaderValue "TestHeaderValue"

После установки новый заголовок отправляется в ответе AD FS, как показано в следующем фрагменте кода Fiddler:

Screenshot of Fiddler on the headers tab that highlights TestHeader: TestHeaderValue under Miscellaneous.

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

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

Заголовки ответа безопасности HTTP Совместимость браузера
HTTP Strict-Transport-Security (HSTS) Совместимость браузера HSTS
X-Frame-Options Совместимость браузера X-Frame-Options
X-XSS-Protection Совместимость браузера X-XSS-Protection
Общий доступ к ресурсам независимо от источника (CORS) Совместимость браузера CORS
Политика безопасности содержимого (CSP) Совместимость браузера CSP

Следующий