La falsificación de solicitudes entre sitios, más conocida por su acrónimo inglés CSRF (Cross-site request forgery), es una vulnerabilidad de seguridad que permite a un atacante engañar a una aplicación web para que realice una acción en nombre de un usuario sin su consentimiento. Django, un popular marco de trabajo de Python para el desarrollo web, cuenta con protecciones integradas contra CSRF.
Según la documentación oficial de Django, “la falsificación de solicitudes entre sitios es un tipo de ataque malicioso explotado por intrusos que engañan a una víctima para que realice acciones en su nombre”. Un ejemplo clásico de un ataque CSRF sería un atacante que engaña a un usuario para que haga clic en un enlace o cargue una página que contiene un formulario malicioso.
Este formulario malicioso tiene como destino una acción concreta en una aplicación web específica (como por ejemplo, cambiar la contraseña de la cuenta de correo del usuario). La aplicación cree que la solicitud procede del usuario autorizado y procesa la solicitud, provocando la acción no deseada.
Para protegerse contra estos ataques, Django tiene una característica de protección CSRF incorporada. Necesita ser activada en la configuración de Django y luego se utiliza en los formularios y vistas relevantes. Esta característica genera y utiliza un token único para cada sesion de usuario. Este token debe estar presente y ser correcto en todas las solicitudes POST para que Django las acepte. Si el token no está presente o es incorrecto, Django rechazará la solicitud como inválida, protegiendo así al usuario y a la aplicación contra posibles ataques CSRF.
Por ejemplo, en un formulario HTML de Django, la protección CSRF puede ser incluida de la siguiente manera:
{% csrf_token %}
Este código incluirá un campo de formulario oculto con el token CSRF actual, que Django comprobará cuando se envíe el formulario.
En conclusión, la CSRF es una vulnerabilidad de seguridad potencialmente grave en las aplicaciones web, pero Django ofrece una protección robusta y fácil de usar contra ella.
Fuentes:
- Django Project. (n.d.). Cross Site Request Forgery protection | Django documentation. https://docs.djangoproject.com/en/3.2/ref/csrf/
- OWASP Foundation. (n.d.). Cross-Site Request Forgery (CSRF). https://owasp.org/www-community/attacks/csrf