Проверка подписи

Заголовок X-Signature содержит HMAC-SHA256 подпись сырого тела запроса (до парсинга JSON). Чтобы проверить, что нотификация пришла от MassAccess:

  1. Получите сырое тело HTTP-запроса как байты (не парсите JSON сразу)
  2. Вычислите HMAC-SHA256 от сырых байтов тела, используя ваш API-ключ в качестве секрета
  3. Сравните полученную HEX-строку с заголовком X-Signature. Используйте специальную функцию безопасного сравнения из стандартной библиотеки вашего языка (например: compare_digest в Python, hash_equals в PHP, timingSafeEqual в Node.js), а не обычный оператор ==. Безопасное сравнение всегда занимает одинаковое время — это не позволяет злоумышленнику подбирать подпись по времени ответа сервера. Если строки не совпали — отклоните запрос, он поддельный.

Проверяйте заголовок X-Signature (HMAC-SHA256) чтобы убедиться в подлинности уведомления:

python
import hmac
import hashlib

def verify_signature(payload: bytes, signature: str, secret: str) -> bool:
    """Verify webhook HMAC-SHA256 signature."""
    expected = hmac.new(
        secret.encode(),
        payload,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, signature)