FastComments.com Blog

Fri Jan 09 2026
...

Обновление безопасности вебхуков

Что нового

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

Предыдущее поведение

Ранее система передавала ваш API-ключ в нагрузках и ожидала, что вы его проверите. Если вы не возвращали 401 для недействительного api-ключа, система не позволяла настроить.

Новое поведение

Теперь система не будет передавать API-ключ для новых конфигураций вебхуков. Вместо этого для новых и существующих интеграций включается подписанная HMAC-подпись. Вы можете или не можете захотеть проверить эту подпись, в зависимости от уровня требуемой безопасности.

Существующие конфигурации будут продолжать передавать API-ключ — теперь вы можете запросить отключение этой функции через тикет поддержки.

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

FastComments теперь отправляет следующие заголовки с каждым запросом вебхука:

Заголовок Описание
X-FastComments-Timestamp Unix-временная метка (в секундах), когда запрос был подписан
X-FastComments-Signature HMAC-SHA256 подпись в формате sha256=<hex>
token Ваш секрет API (сохранен для обратной совместимости)

Как вычисляется подпись

  1. Конкатенировать: timestamp + "." + JSON_payload_body
  2. Вычислить HMAC-SHA256, используя ваш секрет API в качестве ключа
  3. Кодировать результат в шестнадцатеричном формате

Пример проверки (Python)

import hmac
import hashlib
import time
import json

def verify_webhook_signature(headers, body, api_secret):
    timestamp = headers.get('X-FastComments-Timestamp')
    signature = headers.get('X-FastComments-Signature')

    if not timestamp or not signature:
        return False

    # Проверить, что временная метка актуальна
    now = int(time.time())
    if abs(now - int(timestamp)) > 300:
        return False

    # Проверить подпись
    payload = json.dumps(body, separators=(',', ':'))
    message = f"{timestamp}.{payload}"
    expected = hmac.new(
        api_secret.encode(),
        message.encode(),
        hashlib.sha256
    ).hexdigest()

    return signature == f"sha256={expected}"

Выбор HTTP-метода

Кроме того, с этим обновлением — теперь вы можете настроить HTTP-метод для каждого типа события вебхука:

  • Создать событие: POST или PUT (по умолчанию: PUT)
  • Обновить событие: POST или PUT (по умолчанию: PUT)
  • Удалить событие: DELETE, POST или PUT (по умолчанию: DELETE)

Преимущества безопасности

Новая система имеет несколько преимуществ:

  • Защита от атак «человек посередине»
  • Защита от атак повторного воспроизведения с помощью проверки временной метки
  • Обнаружение подделки данных нагрузки

Обратная совместимость

Заголовок token, содержащий ваш секрет API, по-прежнему отправляется с каждым запросом. Существующие интеграции будут продолжать работать без модификаций, и, как уже упоминалось, вы можете запросить отключение старого поведения через поддержку.

Документация

Для получения полной документации смотрите наш Гид по вебхукам.

В заключение

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

На здоровье!