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. Hex-кодирайте резултата

Пример за проверка (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 Тайна, все още се изпраща с всяко искане. Съществуващите интеграции ще продължат да работят без изменения, и както по-рано споменахме, можете да поискате да изключите старото поведение чрез поддръжка.

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

За пълна документация, вижте нашия Ръководство за уебхукове.

В заключение

Както при всички основни актуализации, радваме се, че успяхме да отделим време да оптимизираме, тестваме и правилно публикуваме тези промени. Уведомете ни по-долу, ако откриете някакви проблеми.

Наздраве!