Zum Hauptinhalt springen
DiffHook/Dokumente
AnleitungenSignaturen überprüfen

Signaturen überprüfen

DiffHook signiert jede Webhook-Nutzlast, damit Sie überprüfen können, ob sie von uns stammt und nicht manipuliert wurde.

Wie es funktioniert

Jede Anfrage enthält einen X-Signature-Header mit einer HMAC-SHA256-Signatur des rohen Anfragetexts, dem sha256= vorangestellt ist.

X-Signature: sha256=abc123def456...

Ihr Signaturgeheimnis ist unter App → Einstellungen → API-Schlüssel verfügbar.

Überprüfung in Node.js

Verwenden Sie express.raw(), um die Rohbytes des Anfragetexts vor der JSON-Analyse zu erfassen. Die Berechnung der Signatur über ein erneut serialisiertes Objekt führt zu einem anderen Hash.

const crypto = require('crypto')

function verifySignature(rawBody, signature, secret) {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(rawBody)          // raw Buffer — not JSON.stringify(req.body)
    .digest('hex')

  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  )
}

// Mount with express.raw() so req.body is the raw Buffer
app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
  const signature = req.headers['X-Signature']
  if (!signature || !verifySignature(req.body, signature, process.env.DIFFHOOK_SIGNING_SECRET)) {
    return res.status(401).send('Invalid signature')
  }

  res.status(200).send('OK')
  const event = JSON.parse(req.body)
  // process event...
})

Überprüfung in Python

import hmac, hashlib, json

def verify_signature(body: bytes, signature: str, secret: str) -> bool:
    expected = 'sha256=' + hmac.new(
        secret.encode(),
        body,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(signature, expected)

Wichtige Hinweise

  • Verwenden Sie immer crypto.timingSafeEqual (oder gleichwertig), um Timing-Angriffe zu verhindern
  • Berechnen Sie die Signatur aus den Rohbytes des Anforderungstexts vor der JSON-Analyse
  • Wenn X-Signature fehlt, lehnen Sie die Anfrage ab

Signaturgeheimnis rotieren

Sie können Ihr Signaturgeheimnis jederzeit in den Einstellungen ändern. Nach der Rotation schlagen alte Signaturen fehl – ​​aktualisieren Sie Ihre Bereitstellung, bevor Sie das alte Geheimnis widerrufen.