¿Qué es CSRF?
También llamado: Cross-Site Request Forgery, falsificación de petición en sitios cruzados, XSRF
Definición
Un CSRF es un ataque en el que una web maliciosa hace que tu navegador envíe, sin que lo sepas, una petición a otra web en la que tienes la sesión iniciada, como cambiar tu correo o hacer una transferencia.
El navegador envía automáticamente las cookies de un sitio con cada petición a ese sitio, venga de donde venga. Si estás conectado a tu panel de hosting y visitas una página trampa, esa página puede enviar un formulario al panel, y el panel lo verá como una petición legítima tuya.
Ejemplo
Página maliciosa que, al cargarse, envía un formulario oculto:
<form action="https://panel.example.com/cuenta/email" method="POST" id="f">
<input type="hidden" name="email" value="atacante@example.net">
</form>
<script>document.getElementById("f").submit();</script>
Si el panel no está protegido, el correo de tu cuenta cambia al del atacante, que luego puede restablecer tu contraseña.
Cómo protegerse
- Tokens anti-CSRF: cada formulario incluye un valor aleatorio ligado a la sesión, que la web maliciosa no puede conocer. Los frameworks (Laravel, Django, Symfony, los nonces de WordPress…) lo incluyen de serie.
<form method="POST" action="/cuenta/email">
<input type="hidden" name="_token" value="kq8Z3x...">
...
</form>
- Cookies con
SameSite=LaxoStrict: el navegador no las envía en peticionesPOSTque vienen de otros sitios. Hoy es el valor por defecto en la mayoría de navegadores, pero conviene declararlo. - No usar
GETpara acciones que cambian cosas: un simple<img src="https://panel.example.com/borrar?id=5">bastaría para ejecutarlas.
CSRF y XSS
No hay que confundirlos: en un XSS el atacante ejecuta código dentro de la web vulnerable; en un CSRF, la petición viene desde fuera aprovechando tu sesión. Si una web tiene un XSS, las protecciones CSRF dejan de servir, porque el script puede leer el token.
¿Tienes un producto o servicio relacionado con CSRF? Anúnciate en este término.
Términos relacionados
- XSSUn XSS (Cross-Site Scripting) es una vulnerabilidad que permite a un atacante insertar código...
- CookieUna cookie es un pequeño dato que un servidor guarda en el navegador y...
- CORSCORS es el mecanismo por el que un servidor indica al navegador qué otras...
- Inyección SQLLa inyección SQL es una vulnerabilidad en la que un atacante introduce código SQL...