webhooks
Защита от повторов
Как Spectra предотвращает повторное воспроизведение перехваченного вебхука против вашего счёта.
Защита от повторов на подписанном вебхуке останавливает две атаки:
- Злоумышленник, перехвативший действительный запрос, не может отправить его снова, чтобы повторно запустить тот же ордер.
- Некорректно работающий отправитель не может случайно повторно отправить устаревшие сообщения после сбоев сети.
Механизм
Каждый запрос несёт X-Spectra-Timestamp. Воркер обеспечивает:
- Окно свежести — 5 минут по умолчанию. Запросы с метками времени старше, чем сейчас − 5 мин, отклоняются с 401.
- Кэш nonce — воркер кэширует
(secret_id, timestamp, body_hash)на время окна свежести. Второй запрос со всеми тремя совпадающими значениями отклоняется с 409 Conflict. Кэш хранится только в памяти (без записи в Postgres на каждый запрос), поэтому он дешёвый.
Вместе это означает: перехваченный запрос можно воспроизвести максимум в течение 5 минут и только если злоумышленник выиграет гонку с вашей исходной доставкой.
Настройка окна
Профиль → Webhooks → секрет → Advanced → Freshness window.
1 min → strict; recommended for low-latency networks
5 min → default
15 min → loose; only if your sender has unpredictable lag
Опускаться ниже 1 минуты рискованно — расхождение часов между отправителем и воркером может привести к тому, что подлинные запросы не пройдут проверки свежести.
А как же идемпотентность?
Идемпотентность (client_id) и защита от повторов решают разные
задачи. Идемпотентность позволяет тому же отправителю безопасно
повторять запрос. Защита от повторов останавливает другого
отправителя от повторного использования перехваченного запроса.
Используйте обе.
Симптомы расхождения часов
Если вы видите, что легитимные запросы отклоняются с timestamp out of range, часы вашего отправителя дрейфуют. Проверьте NTP. Ошибка
включает текущее время воркера, чтобы вы могли вычислить дельту.