Вы развернули приложение. Страницы загружаются, формы работают, и ничего не выглядит сломанным. Затем вы запускаете сканирование, и оно возвращает список результатов о заголовки - и ничего из этого не очевидно.
Это нормальная первая реакция. Заголовки не отображаются на экране, поэтому трудно сказать, имеют ли они значение или сканер просто суетится. В этом руководстве простым языком рассматриваются заголовки, которые вы видите чаще всего, что на самом деле делает каждый из них, и как проверить свой заголовок без догадок.
Почему заголовки имеют значение, даже если ваш сайт выглядит хорошо
Заголовки безопасности - это инструкции, которые ваш сервер отправляет браузеру вместе со страницей. Браузер читает их и настраивает способ обработки вашего контента: какие скрипты могут запускаться, может ли страница загружаться через обычный 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, будет отмечать обнаруженные в заголовке проблемы наряду с другими проблемами, с доказательствами, лежащими в основе каждой из них, чтобы вы могли понять, почему она была поднята.
Исправьте их, а затем проверьте повторным сканированием.
Заголовки находятся в конфигурации, поэтому большинство исправлений небольшие: добавьте строку в конфигурацию вашего сервера, параметр в вашей платформе или опцию на панели управления вашего хоста. Измените один заголовок за раз и убедитесь, что сайт по-прежнему работает.
Затем повторите сканирование. Это шаг, который люди пропускают. Редактирование конфигурации не означает, что заголовок теперь правильный на каждой странице, а пометить что-то как исправленное на панели управления - это не то же самое, что подтвердить это. Только новое сканирование той же области показывает, что изменение действительно вступило в силу.
Начните с бесплатного сканирования, посмотрите, что на самом деле делают ваши заголовки, и исправьте основные результаты по одному. Это разумный первый проход, и это гораздо лучшая позиция, чем надеяться, что настройки по умолчанию в порядке.



