Проверка подписи
Заголовок X-Signature содержит HMAC-SHA256 подпись сырого тела запроса (до парсинга JSON). Чтобы проверить, что нотификация пришла от MassAccess:
- Получите сырое тело HTTP-запроса как байты (не парсите JSON сразу)
- Вычислите HMAC-SHA256 от сырых байтов тела, используя ваш API-ключ в качестве секрета
- Сравните полученную 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)