BroadNet
HMAC · Web Crypto · работает в вашем браузере

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

Вставьте полезную нагрузку webhook, ваш секрет подписи и полученную подпись. Инструмент вычисляет HMAC (SHA-256 или SHA-1) с помощью Web Crypto API и сообщает, совпадает ли он. Универсально — работает с любым webhook, подписанным HMAC. Ничего не покидает ваше устройство.

Используйте точные байты в том виде, в котором они получены — повторная сериализация JSON меняет хеш.

Алгоритм
Проверка

HMAC вычислен ниже. Вставьте подпись, чтобы проверить совпадение.

Вычисленный HMAC-SHA-256 (hex)
Вычисление в вашем браузере…

Всё выполняется локально через Web Crypto API — payload и секрет никогда не покидают эту страницу. В любом онлайн-инструменте предпочитайте тестовый секрет реальному продакшен-секрету.

Короткий ответ

Что такое подпись webhook?

Подпись webhook — это хеш с ключом, то есть HMAC, от тела запроса, вычисляемый отправителем с помощью секрета, известного обеим сторонам, и передаваемый вместе с запросом, обычно в заголовке. Чтобы проверить её, вы заново вычисляете HMAC от того же необработанного тела с тем же секретом и алгоритмом и сравниваете. Совпадение доказывает, что payload пришёл от того, кто владеет секретом, и не был изменён при передаче. Это подтверждает происхождение и целостность — но не шифрует payload.

Как правильно проверить подпись

  1. Захватите необработанное тело запроса до любого разбора. Повторная сериализация JSON меняет порядок ключей и пробелы, что меняет хеш.
  2. Вычислите HMAC с общим секретом и хеш-функцией отправителя (в большинстве современных API это SHA-256).
  3. Закодируйте результат в hex и сравните его с заголовком подписи, игнорируя любой префикс схемы, например sha256=.
  4. В продакшене сравнивайте с помощью функции равенства с постоянным временем, чтобы избежать атак по времени, и отклоняйте устаревшие запросы по временной метке, подписанной провайдером.

Часто задаваемые вопросы

Что такое подпись webhook?

Подпись webhook — это хеш с ключом (HMAC) от тела запроса, вычисляемый отправителем с общим секретом и передаваемый в заголовке. Получатель заново вычисляет HMAC от того же необработанного тела с тем же секретом и сравнивает — если они совпадают, payload подлинный и не изменён. Это доказывает происхождение и целостность без шифрования payload.

Как проверить подпись HMAC у webhook?

Возьмите точное необработанное тело запроса (до любого парсинга или повторной сериализации JSON), вычислите HMAC с вашим общим секретом и алгоритмом хеширования отправителя (обычно SHA-256) и закодируйте результат в hex. Сравните его с заголовком подписи, игнорируя префикс вроде 'sha256='. Если они равны, подпись действительна.

Почему моя подпись не совпадает?

Обычные причины: тело было пересериализовано и теперь побайтово отличается от подписанного; неверный секрет или алгоритм хеширования; провайдер подписывает строку, которая также включает временную метку или префикс версии; или несоответствие кодировки hex и base64. Всегда хешируйте точные необработанные байты в том виде, в котором они получены.

Безопасно ли вставлять сюда реальный секрет?

Вычисление полностью выполняется в вашем браузере через Web Crypto API — ничего не отправляется и не логируется. В качестве общей меры предосторожности всё же предпочитайте тестовый секрет реальному продакшен-секрету в любом онлайн-инструменте и меняйте секрет, который вы подозреваете в утечке.

Использовать SHA-256 или SHA-1?

Используйте HMAC-SHA-256. SHA-1 предлагается здесь только потому, что некоторые устаревшие провайдеры всё ещё отправляют подписи SHA-1. Новые интеграции должны стандартизироваться на SHA-256.

Шифрует ли подпись мой payload?

Нет. Подпись HMAC подтверждает подлинность payload и доказывает, что он не был изменён, но тело по-прежнему передаётся в открытом виде. Используйте HTTPS (TLS) для конфиденциальности; подпись касается происхождения и целостности, а не секретности.

Почему в продакшене сравнивают за постоянное время?

Наивное сравнение строк может выдать, сколько первых символов совпало, через крошечные разницы во времени, чем может воспользоваться злоумышленник для подделки подписи. В продакшене сравнивайте с помощью функции постоянного времени, например crypto.timingSafeEqual. Этот инструмент в браузере сравнивает напрямую, поскольку удалённого злоумышленника, измеряющего время, здесь нет.

Проверяйте любой webhook с подписью HMAC.

Этот валидатор работает с любым провайдером, который подписывает webhooks с помощью HMAC. Когда будете готовы к разработке, BroadNet предлагает REST API с токенами Bearer, вебхуки отчётов о доставке и прямые подключения SMPP 3.4.