Используйте связанные с безопасностью заголовки для защиты вашего приложения от распространенных атак
Объяснение в один абзац
Существуют связанные с безопасностью заголовки, используемые для дальнейшей защиты вашего приложения. Самые важные заголовки перечислены ниже. Вы также можете посетить сайты, ссылки на которые есть в нижней части этой страницы, чтобы получить больше информации по этой теме. Вы можете легко установить эти заголовки, используя модуль Helmet для экспресс-доставки (Helmet for koa).
Оглавление
- HTTP Strict Transport Security (HSTS)
- Public Key Pinning for HTTP (HPKP)
- X-Frame-Options
- X-XSS-Protection
- X-Content-Type-Options
- Referrer-Policy
- Expect-CT
- Content-Security-Policy
- Дополнительные ресурсы
HTTP Strict Transport Security (HSTS)
HTTP Strict Transport Security (HSTS) - это механизм политики веб-безопасности для защиты веб-сайтов от атак с использованием понижения степени защиты и перехвата файлов cookie. Он позволяет веб-серверам объявлять, что веб-браузеры (или другие соответствующие пользовательские агенты) должны взаимодействовать с ним только с использованием secure HTTPS-соединений и never через небезопасный протокол HTTP. Политика HSTS реализуется с помощью заголовка Strict-Transport-Security
поверх существующего HTTPS-соединения.
Заголовок Strict-Transport-Security принимает значение max-age
в секундах, чтобы уведомить браузер, как долго он должен обращаться к сайту, используя только HTTPS, и значение includeSubDomains
, чтобы применить правило Strict Transport Security ко всем субдомены сайта.
Пример заголовка - политика HSTS включена в течение одной недели, включая субдомены
Strict-Transport-Security: max-age=2592000; includeSubDomains
🔗 Читать OWASP Secure Headers Project
Public Key Pinning for HTTP (HPKP)
Public Key Pinning for HTTP (HPKP) - это механизм безопасности, позволяющий веб-сайтам HTTPS противостоять подлогам злоумышленников, использующими неправильно выданные или иным образом мошеннические сертификаты SSL/TLS.
Веб-сервер HTTPS обслуживает список хэшей открытых ключей, и при последующих подключениях клиенты ожидают, что этот сервер будет использовать один или несколько из этих открытых ключей в своей цепочке сертификатов. Тщательно используя эту функцию, вы можете значительно снизить риск атак типа "человек посередине (атака посредника)" (MITM) и других проблем с ложной аутентификацией для пользователей вашего приложения, не подвергаясь чрезмерному риску.
Перед внедрением вы должны сначала взглянуть на заголовок Expect-CT
из-за его повышенной гибкости для восстановления после неправильной настройки и других возможностей.
Заголовок Public-Key-Pins принимает 4 значения, значение pin-sha256
для добавления открытого ключа сертификата, хэшированное с использованием алгоритма SHA256, который можно добавлять несколько раз для разных открытых ключей, значение max-age
для сообщения браузеру, как долго ему следует применять правило, значение includeSubDomains
, чтобы применить это правило ко всем поддоменам, и значение report-uri
, чтобы сообщать о сбоях проверки пина по указанному URL.
Пример заголовка - политика HPKP включена на одну неделю, включает субдомены, сообщает об ошибках на примерный URL и разрешает два открытых ключа
Public-Key-Pins: pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM="; pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g="; report-uri="http://example.com/pkp-report"; max-age=2592000; includeSubDomains
🔗 Читать OWASP Secure Headers Project
X-Frame-Options
Заголовок X-Frame-Options защищает приложение от атак Clickjacking, объявляя политику того, как ваше приложение может быть встроено в другие (внешние) страницы с использованием фреймов. ,
X-Frame-Options позволяет 3 параметра: параметр deny
, запрещающий встраивание ресурса в целом, параметр sameorigin
, позвол яющий встраивать ресурс на том же хосте/источнике, и параметр allow-from
для указания хоста, где вложение ресурса разрешено.
Пример заголовка - Запретить встраивание вашего приложения
X-Frame-Options: deny
🔗 Читать OWASP Secure Headers Project
X-XSS-Protection
Этот заголовок включает фильтр Межсайтовый скриптинг в вашем браузере.
Он принимает 4 параметра: 0
для отключения фильтра, 1
для включения фильтра и включения автоматической очистки страницы, mode=block
для включения фильтра и предотвращения рендеринга страницы при обнаружении атаки XSS (этот параметр необходимо добавить к 1
, используя точку с запятой, и report=<domainToReport>
, чтобы сообщить о нарушении (этот параметр должен быть добавлен к 1
).
Пример заголовка - включите защиту XSS и сообщите о нарушениях к примеру URL
X-XSS-Protection: 1; report=http://example.com/xss-report
🔗 Читать OWASP Secure Headers Project
🔗 Читать OWASP Secure Headers Project
X-Content-Type-Options
Установка этого заголовка не позволит браузеру интерпретировать файлы как что-то еще, нежели объявленным типом содержимого в заголовках HTTP.
Пример заголовка - Запретить перехват содержимого
X-Content-Type-Options: nosniff
🔗 Читать OWASP Secure Headers Project
Referrer-Policy
HTTP-заголовок Referrer-Policy определяет, какая информация о реферере, отправленная в заголовке Referer
, должна быть включена в сделанные запросы.
Он разрешает 8 параметров, параметр no-referrer
для полного удаления заголовка Referer
, no-referrer-when-downgrade
для удаления заголовка Referer
при понижении, например HTTPS -> HTTP, origin
параметр для отправки источника хоста (корня хоста) в качестве реферера only, параметр origin-when-cross-origin
для отправки URL-адреса полного источника, когда он остается на том же источнике, и отправки источника хоста only, если в противном случае, параметр same-origin
для отправки информации о реферере только для источников с одним и тем же сайтом и пропуск в запросах между источниками, параметр strict-origin
для сохранения заголовка Referer
только на одном уровне безопасности (HTTPS -> HTTPS) и пропуска его в менее безопасном месте назначения, параметре strict-origin-when-cross-origin
для отправки полного URL-адреса реферера в место назначения того же источника, источник only в место назначения перекрестного источника на уровне безопасности same и нет реферера в менее безопасном перекрестном источнике и параметр unsafe-url
для отправки полного реферера места назначения того же или перекрестного происхождения.
Пример заголовка - полностью удалите заголовок Referer
Referrer-Policy: no-referrer
🔗 Читать OWASP Secure Headers Project
Expect-CT
Заголовок Expect-CT используется сервером для указания того, что браузеры должны оценивать соединения с хостом, испускающим заголовок для соответствия прозрачности сертификата.
Этот заголовок принимает 3 параметра: параметр report-uri
для предоставления URL-адреса, по которому следует сообщать о сбоях Expect-CT, параметр forcece
, указывающий браузеру, что прозрачность сертификата должна применяться (а не только сообщаться), и отказываться от будущих подключений, нарушающих прозрачность сертификата и параметра max-age
для указания количества секунд, в течение которых браузер рассматривает хост как известный хост Expect-CT.
Пример заголовка - Обеспечить прозрачность сертификата в течение недели и сообщить пример URL
Expect-CT: max-age=2592000, enforce, report-uri="https://example.com/report-cert-transparency"
🔗 Читать OWASP Secure Headers Project
Content-Security-Policy
Заголовок ответа HTTP Content-Security-Policy позволяет контролировать ресурсы, которые пользовательский агент может загружать для данной страницы. За некоторыми исключениями, политики в основном включают указание происхождения сервера и конечных точек сценария. Это помогает защититься от межсайтовых скриптовых атак (XSS).
Пример заголовка - включите CSP и выполняйте сценарии только из одного источника
Content-Security-Policy: script-src 'self'
Существует много политик, включенных с помощью Content-Security-Policy, которые можно найти на сайтах, ссылки на которые приведены ниже.
🔗 Читать OWASP Secure Headers Project
Дополнительные ресурсы
🔗 OWASP Secure Headers Project
🔗 Node.js Security Checklist (RisingStack)