Fri Jan 09 2026
...
Mise à jour de la sécurité des Webhooks
Quoi de neuf
Auparavant, il y avait une friction supplémentaire pour configurer les Webhooks par rapport à d'autres plateformes. Nous considérions cela comme une bonne chose en raison des mesures de sécurité supplémentaires requises, cependant nous avons récemment adopté un mécanisme qui est tout aussi sûr mais dont la sécurité est facultative.
Comportement précédent
Auparavant, le système transmettait votre clé API dans les charges utiles et s'attendait à ce que vous la validiez. Si vous ne retourniez pas un 401 pour une clé API invalide, le système n'autorisait pas la configuration.
Nouveau comportement
Maintenant, le système ne transmettra pas de clé API pour les nouvelles configurations de webhook. Au lieu de cela, pour les intégrations nouvelles et existantes, une signature HMAC signée est incluse. Vous pouvez ou non vouloir valider cette signature, selon le niveau de sécurité requis.
Les configurations existantes continueront à passer la clé API - vous pouvez maintenant demander à désactiver cela via un ticket de support.
Vérification de la signature HMAC
FastComments envoie désormais les en-têtes suivants avec chaque demande de webhook :
| En-tête | Description |
|---|---|
X-FastComments-Timestamp |
Horodatage Unix (secondes) lorsque la demande a été signée |
X-FastComments-Signature |
Signature HMAC-SHA256 au format sha256=<hex> |
token |
Votre secret API (gardé pour la compatibilité ascendante) |
Comment la signature est calculée
- Concaténez :
timestamp + "." + JSON_payload_body - Calculez HMAC-SHA256 en utilisant votre secret API comme clé
- Encodez le résultat en hexadécimal
Exemple de vérification (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
# Vérifier que l'horodatage est récent
now = int(time.time())
if abs(now - int(timestamp)) > 300:
return False
# Vérifier la signature
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}"
Sélection de la méthode HTTP
De plus, inclus avec cette mise à jour - vous pouvez maintenant configurer la méthode HTTP pour chaque type d'événement webhook :
- Créer un événement : POST ou PUT (par défaut : PUT)
- Mettre à jour un événement : POST ou PUT (par défaut : PUT)
- Supprimer un événement : DELETE, POST ou PUT (par défaut : DELETE)
Avantages en matière de sécurité
Le nouveau système présente quelques avantages :
- Protection contre les attaques de type homme du milieu
- Prévention des attaques par rejeu via la vérification de l'horodatage
- Détection de falsification des charges utiles
Compatibilité ascendante
L'en-tête token contenant votre secret API est toujours envoyé avec chaque demande. Les intégrations existantes continueront de fonctionner sans modification, et comme
mentionné précédemment, vous pouvez demander à désactiver l'ancien comportement via le support.
Documentation
Pour la documentation complète, consultez notre Guide des Webhooks.
En conclusion
Comme toutes les grandes versions, nous sommes ravis d'avoir pu prendre le temps d'optimiser, de tester et de publier correctement ces changements. Faites-nous savoir ci-dessous si vous découvrez des problèmes.
À votre santé !
