chore(caddy): security headers для meraocenka.ru + отключение browse в /preview #3519
1 changed files with 35 additions and 2 deletions
|
|
@ -184,10 +184,13 @@ gendsgn.ru {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Static HTML mockups для review (audit alternatives).
|
# Static HTML mockups для review (audit alternatives).
|
||||||
# Public access — без auth (по запросу 2026-05-17).
|
# Public access — без auth (по запросу 2026-05-17) — это намеренно и
|
||||||
|
# менять НЕ надо. Но каталог не должен листингом отдавать список
|
||||||
|
# файлов случайному посетителю: без `browse` file_server продолжает
|
||||||
|
# отдавать сами файлы по прямой ссылке, просто без index-листинга.
|
||||||
handle_path /preview/* {
|
handle_path /preview/* {
|
||||||
root * /srv/preview
|
root * /srv/preview
|
||||||
file_server browse
|
file_server
|
||||||
}
|
}
|
||||||
|
|
||||||
# Trade-In UI preview — public CI surface (#801). Рендерит mock-фикстуру
|
# Trade-In UI preview — public CI surface (#801). Рендерит mock-фикстуру
|
||||||
|
|
@ -400,6 +403,36 @@ www.gendsgn.ru {
|
||||||
meraocenka.ru {
|
meraocenka.ru {
|
||||||
encode zstd gzip
|
encode zstd gzip
|
||||||
|
|
||||||
|
# #3471 (security-headers follow-up): публичный B2C-домен без базовых
|
||||||
|
# security-заголовков. Позиция директивы в файле не важна — Caddyfile
|
||||||
|
# применяет директивы в фиксированном порядке (`header` идёт раньше
|
||||||
|
# `reverse_proxy`), не по строке в исходнике.
|
||||||
|
#
|
||||||
|
# Проверено: ни tradein-mvp/frontend (обслуживает этот домен, отдаёт
|
||||||
|
# `/trade-in/mera-public*`), ни его next.config.ts/middleware не
|
||||||
|
# выставляют ни один из этих заголовков — дублирования нет.
|
||||||
|
header {
|
||||||
|
# 180 суток (15552000s). НЕ ставить includeSubDomains и НЕ ставить
|
||||||
|
# preload — оба флага практически необратимы (браузеры кэшируют
|
||||||
|
# preload-список надолго, includeSubDomains ломает любой будущий
|
||||||
|
# HTTP-поддомен), а не все поддомены meraocenka.ru гарантированно
|
||||||
|
# под нашим контролем. Если это когда-нибудь понадобится — отдельное
|
||||||
|
# осознанное решение, не «улучшение по умолчанию».
|
||||||
|
Strict-Transport-Security "max-age=15552000"
|
||||||
|
# Запрет встраивания во фрейм: X-Frame-Options — для старых
|
||||||
|
# клиентов, которые не понимают CSP; frame-ancestors — современный
|
||||||
|
# механизм. Оба вместе, не один вместо другого.
|
||||||
|
X-Frame-Options "DENY"
|
||||||
|
Content-Security-Policy "frame-ancestors 'none'"
|
||||||
|
X-Content-Type-Options "nosniff"
|
||||||
|
Referrer-Policy "strict-origin-when-cross-origin"
|
||||||
|
# Не даём стеку светиться в ответе. Полноценный CSP
|
||||||
|
# (default-src/script-src/...) сюда намеренно НЕ входит — отдельная
|
||||||
|
# работа с риском сломать фронт, здесь только периметр вокруг фрейма.
|
||||||
|
-Server
|
||||||
|
-X-Powered-By
|
||||||
|
}
|
||||||
|
|
||||||
log {
|
log {
|
||||||
output file /var/log/caddy/meraocenka.ru.log
|
output file /var/log/caddy/meraocenka.ru.log
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue