Skip to content

Sicurezza Webhooks

Proteggi i tuoi webhook endpoint verificando l'autenticità delle richieste.

Firma HMAC

Ogni richiesta include una firma HMAC-SHA256:

X-BladeCRM-Signature: sha256=abc123def456...

Verificare la Firma

1. Ottieni il Secret

Quando crei un webhook, viene generato un secret. Copialo e conservalo in modo sicuro.

2. Calcola la Firma

python
import hmac
import hashlib

def verify_signature(payload, signature, secret):
    expected = 'sha256=' + hmac.new(
        secret.encode(),
        payload.encode(),
        hashlib.sha256
    ).hexdigest()
    
    return hmac.compare_digest(expected, signature)

3. Confronta

Se le firme corrispondono, la richiesta è autentica.

Esempi

Node.js

javascript
const crypto = require('crypto');

function verifyWebhook(payload, signature, secret) {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(payload, 'utf8')
    .digest('hex');
    
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signature)
  );
}

app.post('/webhook', (req, res) => {
  const signature = req.headers['x-bladecrm-signature'];
  const payload = JSON.stringify(req.body);
  
  if (!verifyWebhook(payload, signature, WEBHOOK_SECRET)) {
    return res.status(401).send('Invalid signature');
  }
  
  // Processa il webhook
  res.status(200).send('OK');
});

PHP

php
function verifyWebhook($payload, $signature, $secret) {
    $expected = 'sha256=' . hash_hmac('sha256', $payload, $secret);
    return hash_equals($expected, $signature);
}

$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_BLADECRM_SIGNATURE'];

if (!verifyWebhook($payload, $signature, WEBHOOK_SECRET)) {
    http_response_code(401);
    exit('Invalid signature');
}

// Processa il webhook
http_response_code(200);

Best Practices

  • ✅ Verifica sempre la firma
  • ✅ Usa timing-safe comparison
  • ✅ Conserva il secret in modo sicuro
  • ✅ Usa HTTPS per l'endpoint
  • ✅ Rigenerale il secret periodicamente

Rigenerare il Secret

Se pensi che il secret sia compromesso:

  1. ImpostazioniWebhooks
  2. Seleziona il webhook
  3. Rigenera Secret
  4. Aggiorna il secret nel tuo server

WARNING

Non saltare la verifica della firma. Senza, chiunque potrebbe inviare richieste false al tuo endpoint.

Realizzato con ❤️ da DScom