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:
| Encabezado | Valor | Propósito |
|---|---|---|
X-Header | GitScrum | Identifica la solicitud como originada de GitScrum |
User-Agent | GitScrum Webhook | Identificación estándar del user agent |
Content-Type | application/json | Formato 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}), 200HTTPS
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/webhooksLista 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
- Formato del Payload — Referencia de la estructura del payload
- Buenas Prácticas — Manejo de webhooks en producción
- Solución de Problemas — Problemas comunes y soluciones