Заголовки
Общие
Заголовки выполняют большую роль в безопасности, помогая уменьшить поверхность атак разных видов на веб-приложение.
Эти заголовки используются в большинстве современных веб-приложений, так как они обеспечивают базовый уровень защиты от наиболее распространённых уязвимостей.
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 следующими строками с указанием своих доменов или другого патерна:
- Часть файла конфигурации 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
Добавить следующий блок в файл конфигурации виртуального хоста:
- Часть файла конфигурации виртуального хоста Apache2
<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-запросы и кэшировать их отдельно.