Автоматизация на вебхуках

HMAC-подпись для хуков: без неё входящий запрос — просто шум в сети

HMAC-подпись для хуков: без неё входящий запрос — просто шум в сети

Смотрим в тело запроса и не доверяем заголовку «по умолчанию». Правильная схема простая: получаем raw body, считаем HMAC на стороне приёма, сравниваем с подписью из header. Если провайдер шлёт `sha256=...`, не надо «почти такой же» строковый compare — только константное время, иначе ловите timing side-channel на ровном месте.

Критичные правила:
• raw body должен быть бит-в-бит тем же, что подписал отправитель; любое перепарсивание JSON ломает проверку
• секрет хранится отдельно от кода, ротация — через несколько активных ключей
• сверяем не только подпись, но и timestamp/nonce, иначе replay-атака проходит как «валидный» дубль

import hmac, hashlib
sig = hmac.new(secret, raw_body, hashlib.sha256).hexdigest()
ok = hmac.compare_digest(sig, recv_sig)

На практике ошибки обычно банальны: прокси режет тело, фреймворк уже распарсил JSON, а хендлер сравнивает не тот формат подписи. Ещё хуже — когда 200 OK отдаётся до проверки: злоумышленник получает бесплатный квиток, а вы потом чистите мусор асинхронно.

Идемпотентность — это не роскошь, а база: даже валидный хук может прилететь повторно. Храните event_id, дедуплицируйте, а при невалидной подписи отвечайте 401/403 без лишней болтовни. Ретрай-политика решает всё, если ваш провайдер упрямо стучится повторно.
Этот пост опубликован в Telegram-канале Автоматизация на вебхуках. Подписаться можно по ссылке: @webhook_automation_hub_arb.
tech

Свежие посты в категории «Tech Infrastructure»

Все каналы категории →

start

Готовы запустить рекламу через сеть public.tg?

Новый оффер, продукт, GEO, кейс, событие или партнёрский запуск — соберём маршрут под задачу и отдадим медиаплан.

Telegram для медиаплана: @AFFtop_connect. Быстрый тест: $20 за канал, $1000 за пакет по сети.