GitScrum / Docs

Seguridad

Seguridad de webhooks de GitScrum: encabezados personalizados, requisitos HTTPS, consideraciones de IP y verificación de solicitudes.

Protege tus endpoints de webhook para asegurar que solo se procesen solicitudes legítimas de GitScrum.

Encabezados de la Solicitud

Cada entrega de webhook de GitScrum incluye estos encabezados personalizados:

EncabezadoValorPropósito
X-HeaderGitScrumIdentifica la solicitud como originada de GitScrum
User-AgentGitScrum WebhookIdentificación estándar del user agent
Content-Typeapplication/jsonFormato del payload

Verificar el Origen

Verifica el encabezado X-Header para confirmar que las solicitudes provienen de GitScrum:

app.post('/webhooks/gitscrum', (req, res) => {
  // Verify the request comes from GitScrum
  if (req.headers['x-header'] !== 'GitScrum') {
    return res.status(403).json({ error: 'Forbidden' });
  }

  // Process the webhook
  const event = req.body;
  // ...

  res.status(200).json({ received: true });
});
@app.route('/webhooks/gitscrum', methods=['POST'])
def webhook():
    # Verify the request comes from GitScrum
    if request.headers.get('X-Header') != 'GitScrum':
        return jsonify({"error": "Forbidden"}), 403

    event = request.get_json()
    # Process the webhook...

    return jsonify({"received": True}), 200

HTTPS

Siempre usa HTTPS para tus URLs de endpoint de webhook. HTTPS cifra los datos en tránsito, previniendo:

  • Interceptación de payload por terceros
  • Ataques man-in-the-middle
  • Manipulación de datos

Aunque los endpoints HTTP funcionan, GitScrum recomienda fuertemente HTTPS para todas las configuraciones de webhook en producción.

Seguridad de la URL del Endpoint

Protege tu endpoint de webhook con medidas adicionales:

Usa una Ruta Única

Usa una ruta impredecible para tu endpoint de webhook:

✅ https://your-server.com/webhooks/gs-a8x92j4k
❌ https://your-server.com/webhooks

Lista de IPs Permitidas

Si tu infraestructura lo soporta, configura reglas de firewall para aceptar solo solicitudes de los rangos de IP de GitScrum. Contacta el soporte de GitScrum para información actual de IP.

Limitación de Tasa

Implementa limitación de tasa en tu endpoint de webhook para protección contra picos inesperados de tráfico:

const rateLimit = require('express-rate-limit');

const webhookLimiter = rateLimit({
  windowMs: 1 * 60 * 1000, // 1 minute
  max: 100, // 100 requests per minute
});

app.post('/webhooks/gitscrum', webhookLimiter, (req, res) => {
  // Process webhook
});

Manejo de Datos

Datos Sensibles

Los payloads de webhook pueden contener:

  • Títulos y descripciones de tareas con información sensible del proyecto
  • Nombres y nombres de usuario de miembros del equipo
  • Detalles de sprints y proyectos

Trata los datos de webhook con los mismos estándares de seguridad que tus otros datos empresariales.

Retención de Datos

GitScrum registra las entregas de webhook incluyendo el cuerpo del payload y el código de estado de la respuesta. Estos logs se almacenan en el log de entregas de webhook y son accesibles a través del proyecto.

Validación del Payload

Siempre valida la estructura del payload antes de procesar:

app.post('/webhooks/gitscrum', (req, res) => {
  const { data } = req.body;

  if (!data || typeof data !== 'object') {
    return res.status(400).json({ error: 'Invalid payload' });
  }

  // Validate expected fields exist
  if (!data.uuid) {
    return res.status(400).json({ error: 'Missing uuid' });
  }

  // Process valid webhook
  // ...

  res.status(200).json({ received: true });
});

Relacionado