Zum Hauptinhalt springen

Webhook-Sicherheit

Jede Webhook-Zustellung enthält eine Signatur, die Sie überprüfen sollten, um sicherzustellen, dass die Anfrage von RxScale stammt und nicht manipuliert wurde.

Signaturüberprüfung

Jede Webhook-Anfrage enthält einen Signatur-Header. Überprüfen Sie ihn, indem Sie einen HMAC-SHA256-Hash des Anfragekörpers mit Ihrem signing_secret berechnen.

Beispiel (Python)

import hmac
import hashlib

def verify_webhook(payload_body: bytes, signature: str, signing_secret: str) -> bool:
    expected = hmac.new(
        signing_secret.encode(),
        payload_body,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, signature)

Beispiel (Node.js)

const crypto = require('crypto');

function verifyWebhook(payloadBody, signature, signingSecret) {
  const expected = crypto
    .createHmac('sha256', signingSecret)
    .update(payloadBody)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signature)
  );
}

Best Practices

Verarbeiten Sie niemals Webhook-Payloads, ohne vorher die Signatur zu überprüfen. Dies schützt vor gefälschten Anfragen.
Verwenden Sie immer hmac.compare_digest (Python) oder crypto.timingSafeEqual (Node.js), um Timing-Angriffe zu verhindern.
Senden Sie innerhalb von 5 Sekunden eine 2xx-Antwort zurück. Wenn Sie aufwändige Verarbeitung durchführen müssen, bestätigen Sie den Webhook zuerst und verarbeiten Sie ihn anschließend asynchron.
Webhook-Zustellungen können wiederholt werden. Verwenden Sie event_type + timestamp + data.uid, um Ereignisse zu deduplizieren.