Saltar al contenido principal

Verificación de Firma

Siempre verifica firmas de webhook usando HMAC SHA-256:
const crypto = require('crypto');

const verifyWebhookSignature = (payload, signature, secret) => {
  const expectedSignature = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');
  
  // Usar comparación de tiempo constante
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expectedSignature)
  );
};

app.post('/webhooks/killb', express.raw({type: 'application/json'}), (req, res) => {
  const signature = req.headers['x-signature-sha256'];
  const payload = req.body.toString();
  
  if (!verifyWebhookSignature(payload, signature, WEBHOOK_SECRET)) {
    return res.status(401).json({ error: 'Firma inválida' });
  }
  
  // Procesar webhook
  const event = JSON.parse(payload);
  processEvent(event);
  
  res.status(200).json({ received: true });
});

Mejores Prácticas de Seguridad

Siempre usa HTTPS para endpoints de webhook
Usa secrets aleatorios con mínimo de 32 caracteres
Nunca omitas la verificación de firma
Protege contra inundación de webhook

Próximos Pasos

Referencia de Eventos

Ver todos los eventos de webhook