FastComments.com Blog

Fri Jan 09 2026
...

Ενημέρωση Ασφαλείας Webhook

Τι Νέο

Προηγουμένως, υπήρχε περισσότερη δυσκολία στη ρύθμιση των Webhooks σε σύγκριση με άλλες πλατφόρμες. Θεωρήσαμε αυτό καλό λόγω των επιπλέον μέτρων ασφαλείας που απαιτούνταν, ωστόσο πρόσφατα καταλήξαμε σε έναν μηχανισμό που είναι εξίσου ασφαλής αλλά αυτή η ασφάλεια είναι προαιρετική.

Προηγούμενη Συμπεριφορά

Προηγουμένως, το σύστημα περνούσε το API key σας στα payloads και αναμέναμε να το επικυρώσετε. Εάν δεν επιστρέψατε ένα 401 για ένα μη έγκυρο api key, το σύστημα δεν θα επέτρεπε τη ρύθμιση.

Νέα Συμπεριφορά

Τώρα, το σύστημα δεν θα περνά ένα API key για νέες ρυθμίσεις webhook. Αντίθετα, για νέες και υπάρχουσες ενσωματώσεις περιλαμβάνεται μια υπογεγραμμένη υπογραφή HMAC. Ίσως θελήσετε ή όχι να επικυρώσετε αυτή την υπογραφή, ανάλογα με το επίπεδο ασφαλείας που απαιτείται.

Οι υπάρχουσες ρυθμίσεις θα συνεχίσουν να περνούν το API key - μπορείτε τώρα να ζητήσετε να το απενεργοποιήσετε μέσω ενός εισιτηρίου υποστήριξης.

Επικύρωση Υπογραφής HMAC

Το FastComments στέλνει πλέον τα ακόλουθα headers με κάθε αίτημα webhook:

Header Περιγραφή
X-FastComments-Timestamp Unix timestamp (δευτερόλεπτα) όταν υπογράφηκε το αίτημα
X-FastComments-Signature Υπογραφή HMAC-SHA256 στη μορφή sha256=<hex>
token Το API Secret σας (διατηρείται για συμβατότητα)

Πώς Υπολογίζεται η Υπογραφή

  1. Συγκεντρώστε: timestamp + "." + JSON_payload_body
  2. Υπολογίστε HMAC-SHA256 χρησιμοποιώντας το API Secret σας ως κλειδί
  3. Κωδικοποιήστε το αποτέλεσμα σε hex

Παράδειγμα Επικύρωσης (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

    # Επικύρωση ότι το timestamp είναι πρόσφατο
    now = int(time.time())
    if abs(now - int(timestamp)) > 300:
        return False

    # Επικύρωση υπογραφής
    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}"

Επιλογή Μεθόδου HTTP

Επιπλέον, με αυτή την ενημέρωση - μπορείτε τώρα να ρυθμίσετε τη μέθοδο HTTP για κάθε τύπο γεγονότος webhook:

  • Δημιουργία Γεγονότος: POST ή PUT (προεπιλογή: PUT)
  • Ενημέρωση Γεγονότος: POST ή PUT (προεπιλογή: PUT)
  • Διαγραφή Γεγονότος: DELETE, POST ή PUT (προεπιλογή: DELETE)

Οφέλη Ασφαλείας

Το νέο σύστημα έχει μερικά οφέλη:

  • Προστασία από επιθέσεις man-in-the-middle
  • Πρόληψη επαναλαμβανόμενων επιθέσεων μέσω επικύρωσης timestamp
  • Ανίχνευση αλλοίωσης payload

Συμβατότητα με Παλιές Εκδόσεις

Η επικεφαλίδα token, που περιέχει το API Secret σας, στέλνεται ακόμα με κάθε αίτημα. Οι υπάρχουσες ενσωματώσεις θα συνεχίσουν να λειτουργούν χωρίς τροποποίηση, και όπως αναφέρθηκε προηγουμένως, μπορείτε να ζητήσετε να απενεργοποιήσετε τη παλιά συμπεριφορά μέσω υποστήριξης.

Τεκμηρίωση

Για πλήρη τεκμηρίωση, ανατρέξτε στον Οδηγό Webhooks.

Στην Κατακλείδα

Όπως συμβαίνει με όλες τις μεγάλες εκδόσεις, είμαστε χαρούμενοι που μπορέσαμε να αφιερώσουμε χρόνο για να βελτιστοποιήσουμε, να δοκιμάσουμε και να απελευθερώσουμε σωστά αυτές τις αλλαγές. Ενημερώστε μας παρακάτω αν ανακαλύψετε οποιαδήποτε θέματα.

Καλή συνέχεια!