fix(mera/b2c): ужесточить периметр по итогам ревью — _next/static вместо _next, скраб X-Authenticated-User
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI / changes (pull_request) Successful in 7s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI / changes (pull_request) Successful in 7s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
1. Матчер статики сужен с /trade-in/_next/* до /trade-in/_next/static/* — тот же, что у @uipreview (Caddyfile:78), проверенный в проде. Широкий вариант открывал анонимам /_next/image (оптимизатор картинок, CPU по запросу), который лэндингу не нужен: next/image, <img> и url() в mera-public не встречаются вообще, картинок нет, шрифты — next/font/google self-hosted в _next/static/media. 2. Во все три reverse_proxy блока добавлен header_up -X-Authenticated-User — единообразие с остальным периметром (:87, :129, :169). Блок не под basic_auth, т.е. анонимный клиент тем более может прислать свой заголовок. Сейчас инертно (лэндинг статичен), но станет дырой на этапе 5, когда откроется публичный /estimate. 3. Регресс-тест на сужение: /trade-in/_next/image должен отдавать 404.
This commit is contained in:
parent
537b0ac06e
commit
c8ff201345
2 changed files with 29 additions and 4 deletions
27
Caddyfile
27
Caddyfile
|
|
@ -239,7 +239,16 @@ meraocenka.ru {
|
|||
# Caddy→backend хопа, пользователь /trade-in никогда не видит.
|
||||
handle / {
|
||||
rewrite * /trade-in/mera-public
|
||||
reverse_proxy tradein-frontend:3000
|
||||
reverse_proxy tradein-frontend:3000 {
|
||||
# Тот же периметр-скраб, что у @uipreview (:87) и @tradein ниже.
|
||||
# Этот блок вообще не под basic_auth, поэтому анонимный клиент
|
||||
# тем более может прислать свой X-Authenticated-User. Сейчас
|
||||
# инертно (лэндинг статичен, backend-вызовов нет), но снимаем
|
||||
# ради единообразия периметра, а не полагаясь на то, что
|
||||
# downstream ничего не делает с заголовком — иначе на этапе 5,
|
||||
# когда откроется публичный /estimate, это станет дырой.
|
||||
header_up -X-Authenticated-User
|
||||
}
|
||||
}
|
||||
|
||||
# Подстраницы САМОГО лэндинга. Нужны с момента мержа #2615: футер ссылается
|
||||
|
|
@ -253,14 +262,24 @@ meraocenka.ru {
|
|||
# под него не подпадает и по-прежнему отдаёт 404. Регресс-тест на это —
|
||||
# в scripts/smoke-mera-perimeter.sh.
|
||||
handle /trade-in/mera-public/* {
|
||||
reverse_proxy tradein-frontend:3000
|
||||
reverse_proxy tradein-frontend:3000 {
|
||||
header_up -X-Authenticated-User
|
||||
}
|
||||
}
|
||||
|
||||
# Next.js уже эмитит ссылки на статику с /trade-in-префиксом (тот же
|
||||
# basePath) — passthrough без rewrite. Нужны для рендера страницы (JS/CSS
|
||||
# чанки), сами по себе не содержат ни B2B-данных, ни секретов.
|
||||
handle /trade-in/_next/* {
|
||||
reverse_proxy tradein-frontend:3000
|
||||
#
|
||||
# Именно `static/*`, а не весь `_next/*` — тот же матчер, что у @uipreview
|
||||
# (:78), который в проде доказал, что этого хватает для рендера. Широкий
|
||||
# `_next/*` открыл бы анонимам ещё и `/_next/image` (оптимизация картинок,
|
||||
# CPU-нагрузка по запросу), который на лэндинге не используется вообще:
|
||||
# next/image в tradein-mvp/frontend/src/app/mera-public/ не импортируется.
|
||||
handle /trade-in/_next/static/* {
|
||||
reverse_proxy tradein-frontend:3000 {
|
||||
header_up -X-Authenticated-User
|
||||
}
|
||||
}
|
||||
|
||||
# Allowlist-by-default: любой другой путь (включая B2B — /v2, /admin,
|
||||
|
|
|
|||
|
|
@ -62,6 +62,12 @@ check "meraocenka.ru/v2 — B2B path must 404" "$BASE_MERA/v2" 404
|
|||
check "meraocenka.ru/trade-in/v2 — B2B path must 404" "$BASE_MERA/trade-in/v2" 404
|
||||
check "meraocenka.ru/trade-in/api/* — must 404 (не проксируем API)" "$BASE_MERA/trade-in/api/v1/me" 404
|
||||
|
||||
# 2c. Статика проксируется ТОЛЬКО из _next/static/*. Оптимизатор картинок
|
||||
# /_next/image на лэндинге не нужен (next/image там не импортируется) и
|
||||
# наружу не открыт — иначе аноним получил бы CPU-нагрузку по запросу.
|
||||
# Ловит расширение матчера обратно до `/trade-in/_next/*`.
|
||||
check "meraocenka.ru/_next/image — must 404 (не открываем оптимизатор)" "$BASE_MERA/trade-in/_next/image?url=%2Ftest.png&w=64&q=75" 404
|
||||
|
||||
# 3. B2B-данные trade-in по-прежнему закрыты анониму.
|
||||
#
|
||||
# ВНИМАНИЕ: проверять СТРАНИЦУ (/trade-in/v2) больше нельзя — она отдаёт 200.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue