Webhook security: подпись, timestamp и валидация payload — базовый минимум для трекинга
Webhook без проверки — это не интеграция, а открытая точка для подмены конверсий, дублей и мусорных лидов. Базовая схема защиты простая: проверяешь источник, проверяешь целостность payload, отсекаешь повторы.
Что должно быть в обработчике:
— HMAC-подпись по body или canonical string, а не по распарсенному JSON
— timestamp в запросе и лимит на старение события
— nonce / event_id для антидублей
— allowlist IP или mTLS, если канал критичный
— строгая схема полей: тип, статус, amount, currency, ids
Подписывать лучше не весь «сырой» запрос как получится, а фиксированную строку: порядок полей, разделитель, кодировка. Иначе одна лишняя пробел-правка или изменение сериализации ломает проверку. Если вендор шлёт JSON, сохраняй body до парсинга и считай digest от байтов.
На стороне приёма не принимай событие, если совпала только часть условий. Подпись валидна, но timestamp вышел за окно — reject. IP из allowlist проходит, но event_id уже был — reject. Для повторной доставки делай idempotency key, иначе ретраи превратятся в дубли конверсий.
Полезная привычка: логируй не весь payload, а результат валидации, reason отказа и хэш события. Так проще искать расхождения между трекером, postback и бэкендом без утечки лишних данных.
Tracker Lab
@tracker_lab
Webhook security: подпись, timestamp и валидация payload — базовый минимум для трекинга
Этот пост опубликован в Telegram-канале Tracker Lab. Подписаться можно по ссылке: @tracker_lab.