Bonnes pratiques

Utilisez le corps brut de la requête

Vérifiez toujours la signature à l’aide du corps brut de la requête.

Ne vérifiez pas la signature à l’aide d’un objet JSON analysé.

Incorrect :

<span><span style="color: undefined">JSON.parse(body)</span></span>
<span><span style="color: undefined">JSON.stringify(parsedBody)</span></span>
<span><span style="color: undefined">Verify signature using the new JSON string</span></span>
<span><span style="color: undefined"></span></span>

Corrigé :

<span><span style="color: undefined">Read raw body exactly as received</span></span>
<span><span style="color: undefined">Verify signature</span></span>
<span><span style="color: undefined">Then parse JSON</span></span>
<span><span style="color: undefined"></span></span>

Utilisez une comparaison en temps constant

Utilisez une fonction de comparaison sécurisée lors de la comparaison des signatures.

Fonctions recommandées :

LangueFonction
Node.jscrypto.timingSafeEqual
Pythonhmac.compare_digest
PHPhash_equals

Stocker les identifiants d’événements traités

Les événements webhook peuvent être livrés plus d’une fois.

Stockez toujours les identifiants d’événements traités et évitez de traiter deux fois le même événement.

Exemple de table de base de données :

<span><span style="color: undefined">webhook_event_id</span></span>
<span><span style="color: undefined">processed_at</span></span>
<span><span style="color: undefined">event_type</span></span>
<span><span style="color: undefined"></span></span>

N’exposez pas le secret du webhook

N’exposez jamais votre secret de signature de webhook dans :

  • code frontend ;
  • applications mobiles ;
  • dépôts publics ;
  • journaux;
  • rapports d’erreur;
  • JavaScript dans le navigateur.

Le secret du webhook doit rester uniquement sur votre serveur backend.

Faites pivoter votre secret de webhook si nécessaire

Si votre secret de webhook est compromis, faites-le pivoter depuis votre tableau de bord MeSomb.

Pendant la rotation, MeSomb peut temporairement signer les événements avec l’ancien et le nouveau secret afin d’éviter de rompre votre intégration.