Проверка подписи вебхука KartaPay: HMAC-SHA256

Подпись подтверждает подлинность и целостность подписанных данных при сохранности секрета. Она не заменяет проверку заказа, защиту от повторов и контроль исполнения.

API и разработка
API и разработка
Проверка подписи вебхука KartaPay
Редакция KartaPay5 мин чтенияОпубликовано: Обновлено:
Проверка подписи вебхука KartaPay: HMAC-SHA256 — иллюстрация KartaPay

Уточните точный контракт подписи

KartaPay использует HMAC-SHA256 и заголовок X-KartaPay-Signature. Этого недостаточно для написания совместимого обработчика: нужно знать подписываемые данные, секрет и представление результата.

Проверьте в документации формат заголовка, кодировку подписи и состав сообщения. Не предполагайте hex, base64, префикс или timestamp без подтверждения.

Проверьте перед следующим шагом

  • Известно назначение секрета.
  • Определены подписываемые данные.
  • Проверен формат заголовка.
  • Есть контрольный пример из документации.

Сохраните данные до преобразования

Если протокол подписывает исходное тело запроса, получите его байты до JSON-разбора. Обратная сериализация объекта может изменить пробелы, экранирование и порядок ключей.

Настройте серверный middleware так, чтобы он не уничтожил требуемое представление. Если контракт подписывает другую строку, собирайте именно её по документированным правилам.

  • Ограничить размер тела.
  • Не менять подписываемые байты.
  • Не логировать тело без необходимости.
  • Разбирать бизнес-поля после проверки.

Вычислите ожидаемое значение

Используйте стандартную криптографическую библиотеку и HMAC-SHA256. Обычный SHA-256 от тела или конкатенации с ключом не является заменой HMAC.

Секрет храните в серверном окружении. Ошибка назначения ключа так же нарушает проверку, как ошибка кодировки. Не пытайтесь «починить» интеграцию отключением подписи.

  1. 1Загрузить нужный серверный секрет.
  2. 2Получить документированное сообщение.
  3. 3Вычислить HMAC-SHA256.
  4. 4Преобразовать результат в установленный формат.

Сравните подписи безопасно

Проверьте наличие, допустимый формат и длину полученного значения. Для сравнения используйте подходящую библиотечную операцию постоянного времени, учитывая её требования к длинам буферов.

При отсутствии или несовпадении подписи не выполняйте бизнес-действие. Ответ и диагностический код должны соответствовать контракту и не раскрывать секрет или ожидаемую подпись.

Проверьте перед следующим шагом

  • Пустое значение отклоняется.
  • Некорректная кодировка отклоняется.
  • Сравнение не является обычным сравнением строк.
  • Ошибка не открывает доступ.

Проверьте семантику после подлинности

Даже корректно подписанное событие может относиться к другому заказу или уже обработанной операции. Сверьте проект, идентификатор, сумму, валюту и допустимый статус.

Защита от повторов требует устойчивого учёта. Если протокол включает время или идентификатор события, применяйте их по документации; не придумывайте неподдерживаемое окно доставки.

  • Операция известна вашему проекту.
  • Параметры совпадают с заказом.
  • Переход состояния допустим.
  • Повтор не повторяет выдачу.

Соберите негативные тесты

Используйте контрольные данные и тестовый секрет, не рабочие ключи. Проверяйте изменение одного байта, неверную подпись, повреждённую кодировку и повтор валидного события.

Разделяйте криптографическую ошибку и ошибку бизнес-проверки в безопасном журнале. Это помогает найти причину без раскрытия содержимого запроса.

Проверьте перед следующим шагом

  • Контрольная подпись проходит.
  • Изменённые данные отклоняются.
  • Отсутствующий заголовок не запускает действие.
  • Повтор корректного события безопасен.