Перейти к основному содержимому
Версия: 7.0

Заголовки

Общие

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

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

Docker сборка Пассворка

Общие заголовки безопасности подключаются через директиву include в основном конфигурационном файле Nginx и определяются в файле extra/security-headers.conf. Заголовок Strict-Transport-Security задаётся напрямую в основном конфигурационном файле и, таким образом, применяется ко всему сайту.

ЗаголовокЗначение
X-Frame-Options"DENY"
X-Content-Type-Options"nosniff"
X-XSS-Protection"1; mode=block"
Referrer-Policy"strict-origin-when-cross-origin"
Permissions-Policy"camera=(), microphone=(), geolocation=()"
Strict-Transport-Security"max-age=31536000; includeSubDomains"

Apache2\HTTPD

Общие заголовки содержатся в public/.htaccess. Они применяются автоматически при условии, что обработка .htaccess файлов не была отключена в конфигурации Apache. Заголовок Strict-Transport-Security указан в примерах конфигурации в инструкциях по установке.

ЗаголовокЗначение
X-Frame-Options"DENY"
X-Content-Type-Options"nosniff"
X-XSS-Protection"1; mode=block"
Referrer-Policy"strict-origin-when-cross-origin"
Permissions-Policy"camera=(), microphone=(), geolocation=()"
Strict-Transport-Security"max-age=31536000; includeSubDomains"

X-Frame-Options — Определяет, может ли страница быть загружена во фрейм, iframe или object.

X-Content-Type-Options — Предотвращает попытки браузера угадать тип содержимого.

X-XSS-Protection — Включает (или отключает) встроенную защиту от XSS в старых версиях браузеров. Устаревший, но может использоваться для совместимости.

Referrer-Policy — Определяет, какую информацию браузер отправляет в Referer.

Permissions-Policy — Позволяет ограничивать использование разных возможностей, например: доступ к камере, микрофону, геолокации и другим API.

Strict-Transport-Security — Сообщает браузеру, что сайт должен загружаться только по HTTPS, предотвращая атаки типа downgrade и MITM.

Cross-Origin Resource Sharing

Заголовки CORS регулируют доступ к ресурсам сайта с других доменов.

к сведению

В большинстве случаев изменение или добавление заголовков CORS не требуется. Они нужны только в случаях, когда фронтенд и бэкенд размещены на разных origin — то есть отличаются по домену, порту или протоколу.

Docker сборка Пассворка

Заголовки CORS подключаются через директиву include в основном файле конфигурации Nginx и определяются в файле extra/cors.conf.

ЗаголовокЗначение
Access-Control-Allow-Origin"*"
Access-Control-Allow-Methods"GET,HEAD,OPTIONS,POST,PUT,PATCH,DELETE"
Access-Control-Allow-Headers"Authorization, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, X-Browser-Mode, X-Master-Key-Hash, X-CSRF-Token"
Access-Control-Max-Age"1728000"
Vary"Origin"

Apache2\HTTPD

Заголовки CORS по умолчанию не устанавливаются. При необходимости их можно явно задать в конфигурации виртуального хоста Apache2, внутри блока <Directory> или глобально для всего виртуального хоста.

ЗаголовокЗначение
Access-Control-Allow-Origin"*"
Access-Control-Allow-Methods"GET,HEAD,OPTIONS,POST,PUT,PATCH,DELETE"
Access-Control-Allow-Headers"Authorization, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, X-Browser-Mode, X-Master-Key-Hash, X-CSRF-Token"
Access-Control-Max-Age"1728000"
Vary"Origin"

Access-Control-Allow-Origin — Указывает, какие домены могут делать запросы к ресурсу. Поддерживает следующие значения:

  • Разрешены запросы с любых доменов — *
  • Точное значение, схема + домен — https://example.ru

Указание нескольких доменов через запятую не поддерживается стандартом CORS и приведет к ошибке! Использование нескольких доменов и другие динамические сценарии, реализуются на уровне веб-сервера:

Docker сборка

Заменить строку add_header Access-Control-Allow-Origin "*" always; в файле конфигурации ./conf/nginx/extra/cors.conf следующими строками с указанием своих доменов или другого патерна:

if ($http_origin ~* ^https?://(example\.ru|another\.ru)$) {
add_header Access-Control-Allow-Origin "$http_origin" always;
add_header Access-Control-Allow-Credentials "true" always;
}

Apache2/HTTPD

Добавить следующий блок в файл конфигурации виртуального хоста:

<IfModule mod_headers.c>
SetEnvIf Origin "http(s)?://(example\.com|another\.com)$" ORIGIN_ALLOWED=$0
Header always set Access-Control-Allow-Origin "%{ORIGIN_ALLOWED}e" env=ORIGIN_ALLOWED
Header always set Access-Control-Allow-Credentials "true" env=ORIGIN_ALLOWED
Header always set Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE, OPTIONS" env=ORIGIN_ALLOWED
Header always set Access-Control-Allow-Headers "Authorization, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, X-Browser-Mode, X-Master-Key-Hash, X-CSRF-Token" env=ORIGIN_ALLOWED
Header always set Access-Control-Max-Age "1728000" env=ORIGIN_ALLOWED
Header always set Vary "Origin" env=ORIGIN_ALLOWED
</IfModule>

Access-Control-Allow-Methods — Определяет, какие HTTP-методы разрешены для кросс-доменных запросов.

Access-Control-Allow-Headers — Указывает, какие заголовки могут быть отправлены в кросдоменных запросах.

Access-Control-Max-Age — Время (в секундах), в течение которого результат preflight-запроса может кэшироваться браузером, чтобы не выполнять его каждый раз.

Vary — В контексте CORS используется для корректной обработки запросов, на CDN и прокси. Позволяет корректно обрабатывать разные Origin-запросы и кэшировать их отдельно.