Skip to main content
Підпис охоплює повний payload вебхука: id, delivered_at, event. Підтримуються два алгоритми підпису залежно від keyType:

ED25519 (Рекомендований)

  1. Створити об’єкт payload: id, delivered_at, event
  2. JSON.stringify(payload)
  3. Закодувати JSON-рядок у Base64
  4. Підписати за допомогою ED25519 (ed25519.signAsync)
  5. Закодувати підпис у Base64

Legacy (Застарілий)

  1. Створити об’єкт payload: id, delivered_at, event
  2. JSON.stringify(payload)
  3. Закодувати JSON-рядок у Base64
  4. SHA256 хеш (privateKey + data)
  5. Закодувати хеш у Base64

Особливості безпеки:

  • Підпис охоплює всі поля, включно з id і delivered_at
  • Унікальний id запобігає атакам повторного відтворення (replay attacks)
  • Валідація часової мітки запобігає прийняттю застарілих вебхуків (вікно 16 хвилин)
  • 16-хвилинне вікно враховує повторні спроби (негайно + 5 хв + 10 хв) + мережевий буфер
  • ED25519 забезпечує криптографічну автентичність

Логіка повторної спроби

  1. Перша спроба: Негайно
  2. Друга спроба: затримка 300 секунд (5 хвилин)
  3. Третя спроба: затримка 600 секунд (10 хвилин)
  4. Помилка: задача видаляється з черги та логуються

ВАЖЛИВО: Завжди перевіряйте webhooks, щоб запобігти підробці та повторним атакам.

Повний алгоритм перевірки


Етапи перевірки ED25519

  1. Захист від повторного відтворення - перевірте webhook.id, який не був помічений раніше
  2. Перевірка часової мітки - перевірка delivery_at протягом 16 хвилин (максимальний час доставки + буфер)
  3. Відновлення корисної нагрузки - id, delivery_at, event
  4. Перевірка підпису - ed25519.verifyAsync (signature, payload, publicKey)
  5. Зберегти ідентифікатор веб-гука - зберегти для запобігання повторному відтворенню