fix(tradein/payments): тело нотификации не течёт в мониторинг и аудит, повторы банка не отбиваются лимитом #2794
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2794
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/tradein-payments-perimeter-hardening"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
PR-D2 платёжного контура. Ничего наружу не открывает — только чинит то, что порвётся в момент открытия публичного эндпоинта нотификации (PR-D3).
1. Тело платёжной нотификации утекло бы в мониторинг целиком
Ключ мониторинга на проде задан, библиотека кладёт полное тело запроса в событие, и флаг «не отправлять персональные данные» это не гейтит — он управляет только куками. Первая же ошибка в обработчике отправила бы наружу
Token,Pan,ExpDate,CardId,RebillIdиDATA.Тело вырезается целиком для платёжного сегмента пути. Набор скрабируемых ключей расширен:
customer_email,customer_phone,pan,expdate,cardid,rebillid,token,terminalkey.Найдено три точки инициализации мониторинга, а не одна: основной API, планировщик скрапера и телеграм-мост. Во всех трёх был обработчик канала ошибок и ни в одной — обработчик транзакционного канала. Теперь один и тот же обработчик проведён в оба канала во всех трёх точках.
Это прямой урок вчерашнего дня: в соседнем продукте закрыли только канал ошибок, транзакционный остался с очисткой лишь по адресу, и утечка сохранилась при включённой пятипроцентной выборке. Здесь та же ошибка исключена по построению.
Вырезание тела применено и к планировщику с ботом, хотя там нет веб-запросов — ради единообразия: PR-E добавит подтверждение платежей и сверку именно в контейнер планировщика.
2. Ограничитель частоты не отбивает повторы банка
Для точного пути нотификации — собственный щедрый ограничитель (3000 запросов в минуту на адрес) по идиоме, уже применённой в поддержке, а не полное отключение.
Мотив не «банк упрётся в лимит», а «отказ по частоте никогда не должен стать причиной, по которой денежное состояние разъехалось»: для банка это «доставка не удалась», альтернативного канала у нотификации нет, а очередь повторов растягивается на сутки. При этом полное отключение оставило бы путь без всякой защиты от шторма — подпись проверяется уже после разбора тела.
Оформление заказа под общий лимит не попадает: его инициирует пользователь с сессией, там злоупотребление ограничивается штатно.
Число выбрано как «на два порядка выше проверочных 400 в минуту». Точное расписание повторов банка не задокументировано — спека помечает это как непроверенное. Правится в одном месте.
3. Тело нотификации не попадает в журнал аудита
Точный путь добавлен в набор пропускаемых аудитом.
Отступление от буквы задания, раскрываю честно: я запретил трогать
_PUBLIC_PATHS, а автор его тронул — но в репозитории два разных набора с таким именем. Один в модуле прав, он действительно открывает пути и не тронут. Второй в модуле аудита — это список пропускаемых записей, к авторизации отношения не имеет, и именно он требовался по пункту 3. Трактовка верная.Проверка
Канарейки в смоуке периметра
Добавлены четыре негативные проверки. Сейчас они зелёные (публичный домен отдаёт 404 — Caddy не проксирует; основной домен отдаёт 401 — права не открыты) и осознанно покраснеют, когда PR-D3 и PR-D4 откроют пути. Тогда ожидания надо обновить вместе с ними — это сигнал «периметр изменился», а не поломка.
Что осталось на следующие PR
Открытие путей в правах и в Caddy — PR-D3 и PR-D4. Этот PR ничего не открывает: маршрута нет, права всё равно отдают 401.