Все статьи

Практические руководства

5 минута чтения

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

Простое руководство по CSP, HSTS, X-Frame-Options и Referrer-Policy - что делает каждый заголовок и как проверить ваш сайт с помощью быстрого сканирования.

Автор Luca Deguin

Окно браузера с замком, подключенным к заголовкам ответов, и щитом.

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

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

Почему заголовки имеют значение, даже если ваш сайт выглядит хорошо

Заголовки безопасности - это инструкции, которые ваш сервер отправляет браузеру вместе со страницей. Браузер читает их и настраивает способ обработки вашего контента: какие скрипты могут запускаться, может ли страница загружаться через обычный HTTP, может ли другой сайт встроить ее во фрейм.

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

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

Что на самом деле представляет собой заголовок безопасности

Когда браузер запрашивает страницу, ваш сервер отвечает страницей. и блок метаданных, называемый заголовками ответов. Вы можете увидеть их сами: откройте инструменты разработчика вашего браузера, перейдите на вкладку «Сеть», перезагрузите страницу и нажмите верхний запрос. Заголовки тут же.

Заголовки безопасности - это просто те, которые сообщают браузеру о необходимости соблюдения правила. Некоторые из них строгие, некоторые носят рекомендательный характер, и все они установлены в конфигурации вашего сервера, вашей платформе или вашей хостинговой платформе, а не в вашем HTML.

Content-Security-Policy (CSP)

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

На практике CSP означает следующее: сценарии могут поступать только из вашего собственного домена и одного доверенного CDN; изображения могут поступать откуда угодно через HTTPS; страница не может быть оформлена другим сайтом. Если что-то пытается загрузиться из источника, который вы не разрешили, браузер блокирует это и регистрирует попытку в консоли.

CSP - это дополнительная защита от внедрения сценариев, а также безопасное кодирование и очистка вывода. Это также заголовок, который, скорее всего, что-то сломает, если вы установите его слишком агрессивно. Практический путь для новичка - начать в режиме «только отчет», посмотреть, что было бы заблокировано, исправить реальные проблемы, а затем применить это.

Strict-Transport-Security (HSTS)

HSTS сообщает браузеру, что в течение определенного периода времени он должен взаимодействовать с вашим сайтом только через HTTPS. Как только браузер увидит этот заголовок, он откажется устанавливать небезопасное соединение HTTP с вашим доменом, даже если пользователь введет http:// или перейдите по старой ссылке.

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

Единственное, что здесь следует уважать, - это приверженность. HSTS запоминается браузером столько времени, сколько вы укажете, поэтому начните с короткого периода времени, пока вы убедитесь, что каждый поддомен работает через HTTPS, а затем увеличьте его, как только вы будете уверены.

X-Frame-Options

X-Frame-Options контролирует, может ли другой сайт загружать ваши страницы внутри фрейма. <iframe> на чужой странице.

Зачем беспокоиться? Потому что фрейминг - это механизм кликджекинга, когда злоумышленник накладывает на вашу реальную страницу невидимые или замаскированные элементы, чтобы пользователь нажимал на то, что он не хотел. Если в вашем приложении есть какое-либо действие при входе в систему - кнопка удаления, платеж, изменение настроек - размещение его в другом месте - это риск, который вам не нужен.

Общая настройка: SAMEORIGIN, что позволяет вашим страницам обрамлять друг друга, но блокирует все остальные. Если вы никогда не собираетесь, чтобы вас подставили, обычно это правильный вариант по умолчанию.

Referrer-Policy

Referrer-Policy определяет, какая часть вашего URL-адреса будет доступна другим сайтам, когда пользователь нажимает ссылку с вашей страницы. Современные браузеры обычно используют strict-origin-when-cross-origin: полный URL-адрес может быть отправлен по запросам с одним и тем же источником, тогда как запросы HTTPS с разными источниками получают только источник. Явно более слабая политика может раскрыть больше.

Это важно, поскольку полные URL-адреса иногда содержат конфиденциальные значения в строках запроса - токены, идентификаторы, адреса электронной почты, условия поиска. Передача их третьей стороне происходит тихо, и ее легко пропустить.

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

Остальной практический набор

Еще несколько заголовков появляются достаточно часто, чтобы их можно было узнать по имени:

  • X-Content-Type-Options: nosniff не позволяет браузеру угадать тип файла, что в противном случае может превратить загруженный файл в исполняемый скрипт.

  • Permissions-Policy отключает функции браузера, которые вы не используете, такие как камера, микрофон или геолокация.

  • Cross-Origin-Opener-Policy и соответствующие заголовки перекрестного происхождения изолируют вашу страницу от других, что помогает сдерживать определенные атаки.

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

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

У вас есть два способа посмотреть.

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

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

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

Исправьте их, а затем проверьте повторным сканированием.

Заголовки находятся в конфигурации, поэтому большинство исправлений небольшие: добавьте строку в конфигурацию вашего сервера, параметр в вашей платформе или опцию на панели управления вашего хоста. Измените один заголовок за раз и убедитесь, что сайт по-прежнему работает.

Затем повторите сканирование. Это шаг, который люди пропускают. Редактирование конфигурации не означает, что заголовок теперь правильный на каждой странице, а пометить что-то как исправленное на панели управления - это не то же самое, что подтвердить это. Только новое сканирование той же области показывает, что изменение действительно вступило в силу.

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

Начать проверку
безопасность вашего сайта.

Находите проблемы, готовьте исправления и проверяйте изменения.
Сохраните результаты для следующего развертывания.

+10 000 просканированных сайтов
Обзор платформы VICE