Aller au contenu principal
DiffHook/Documentation
GuidesVérification des signatures

Vérification des signatures

DiffHook signe chaque charge utile de webhook afin que vous puissiez vérifier qu'elle provient de nous et qu'elle n'a pas été falsifiée.

Comment ça marche

Chaque requête comprend un en-tête X-Signature contenant une signature HMAC-SHA256 du corps brut de la requête, préfixée par sha256=.

X-Signature: sha256=abc123def456...

Votre secret de signature est disponible dans Application → Paramètres → Clés API.

Vérification dans Node.js

Utilisez express.raw() pour capturer les octets du corps brut avant toute analyse JSON. Le calcul de la signature sur un objet resérialisé produira un hachage différent.

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...
})

Vérification en 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)

Remarques importantes

  • Utilisez toujours crypto.timingSafeEqual (ou équivalent) pour empêcher les attaques chronométrées.
  • Calculez la signature à partir des octets bruts du corps de la requête, avant l'analyse JSON
  • Si X-Signature est manquant, rejetez la demande

Rotation de votre secret de signature

Faites pivoter votre secret de signature dans Paramètres à tout moment. Après la rotation, les anciennes signatures échoueront : mettez à jour votre déploiement avant de révoquer l'ancien secret.

DiffHook - Surveillance de sites web