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-секрет (сохраняется для совместимости) |
Как вычисляется подпись
- Конкатенировать:
timestamp + "." + JSON_payload_body - Вычислить HMAC-SHA256, используя ваш API-секрет в качестве ключа
- Кодировать результат в шестнадцатеричном формате
Пример верификации (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-секрет, по-прежнему отправляется с каждым запросом. Существующие интеграции будут продолжать работать без изменения, и, как уже упоминалось, вы можете запросить отключение старого поведения через поддержку.
Документация
Для получения полной документации смотрите наш Руководство по вебхукам.
В заключение
Как и все серьезные релизы, мы рады, что смогли выделить время для оптимизации, тестирования и надлежащего выпуска этих изменений. Дайте знать ниже, если вы обнаружите какие-либо проблемы.
С уважением!
