Codea Seguro Codea Seguro
Desarrollo Seguro Dificultad: intermedia

Defensa contra CSRF y SSRF

Dos falsificaciones de petición distintas y cómo mitigar cada una.

CSRF y SSRF suenan parecido pero son ataques opuestos. En CSRF el navegador de la víctima hace una petición no deseada a tu servidor. En SSRF es tu servidor el engañado para pedir a un destino que el atacante elige.

CSRF — Cross-Site Request Forgery

El atacante hace que el navegador del usuario envíe una petición autenticada (usando su cookie) sin que lo sepa.

1. Tokens anti-CSRF

Incluye un token impredecible, ligado a la sesión, en cada formulario o petición que modifique estado. El servidor lo verifica.

// El token va en un campo oculto / cabecera y se valida en el servidor
if (req.body.csrfToken !== req.session.csrfToken) return res.sendStatus(403);

2. Cookies SameSite

SameSite=Lax (o Strict) impide que la cookie viaje en peticiones cross-site, cortando la mayoría de CSRF de raíz. Úsalo junto con tokens, no en lugar de ellos.

3. Verifica el origen

Comprueba las cabeceras Origin/Referer en peticiones que cambian estado.

SSRF — Server-Side Request Forgery

Ocurre cuando tu servidor hace una petición HTTP a una URL que controla el usuario (webhooks, importar desde URL, miniaturas). El atacante apunta a servicios internos o a metadatos del cloud.

1. Allow-list de destinos

// MAL — el servidor pide a cualquier URL que mande el usuario
const data = await fetch(req.body.url);

// BIEN — solo dominios explícitamente permitidos
const DOMINIOS = new Set(['api.proveedor.com', 'cdn.proveedor.com']);
const url = new URL(req.body.url);
if (!DOMINIOS.has(url.hostname)) throw new Error('Destino no permitido');

2. Bloquea rangos internos

Prohíbe IPs privadas y de loopback: 127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 y, crucial en cloud, el endpoint de metadatos 169.254.169.254. Resuelve el DNS y valida la IP final para evitar DNS rebinding.

3. Capa de red

Aísla por red el servicio que hace peticiones salientes y restringe su egreso con un firewall.

Checklist rápida

  • Tokens anti-CSRF en toda operación que cambia estado.
  • Cookies con SameSite=Lax/Strict.
  • Validación de Origin/Referer.
  • Allow-list de dominios para peticiones salientes del servidor.
  • Bloqueo de IPs internas, loopback y metadatos del cloud (169.254.169.254).
  • Validación de la IP resuelta (anti DNS rebinding) y egreso restringido por firewall.