FixVibe
Covered by FixVibehigh

Protección CSRF: defendendo contra cambios de estado non autorizados ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG1 Aprende a evitar a falsificación de solicitudes entre sitios (CSRF) mediante o middleware de Django e os atributos de cookies de SameSite. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG2 A falsificación de solicitudes entre sitios (CSRF) segue sendo unha ameaza importante para as aplicacións web. Esta investigación explora como os marcos modernos como Django implementan protección e como os atributos a nivel de navegador como SameSite ofrecen unha defensa en profundidade contra as solicitudes non autorizadas. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG3 ## Impacto ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG4 A falsificación de solicitudes entre sitios (CSRF) permite que un atacante engane o navegador dunha vítima para que realice accións non desexadas nun sitio web diferente onde a vítima estea autenticada. Dado que os navegadores inclúen automaticamente credenciais ambientais como as cookies nas solicitudes, un atacante pode falsificar operacións de cambio de estado, como cambiar contrasinais, eliminar datos ou iniciar transaccións, sen o coñecemento do usuario. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG5 ## Causa raíz ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG6 A causa fundamental de CSRF é o comportamento predeterminado do navegador web de enviar cookies asociadas a un dominio sempre que se lle faga unha solicitude a ese dominio, independentemente da orixe da solicitude ZXCVFIXVIBETOKEN0ZXCV. Sen unha validación específica de que unha solicitude foi activada intencionalmente desde a propia interface de usuario da aplicación, o servidor non pode distinguir entre unha acción lexítima do usuario e outra falsificada. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG7 ## Mecanismos de protección Django CSRF ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG8 Django ofrece un sistema de defensa integrado para mitigar estes riscos mediante a integración de middleware e modelos ZXCVFIXVIBETOKEN0ZXCV. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG9 ### Activación de middleware ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG10 O ZXCVFIXVIBETOKEN0ZXCV é responsable da protección CSRF e normalmente está activado por defecto ZXCVFIXVIBETOKEN1ZXCV. Debe situarse antes de calquera middleware de visualización que asuma que os ataques CSRF xa se trataron ZXCVFIXVIBETOKEN2ZXCV. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG11 ### Implementación de modelos ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG12 Para calquera formulario POST interno, os desenvolvedores deben incluír a etiqueta ZXCVFIXVIBETOKEN0ZXCV dentro do elemento ZXCVFIXVIBETOKEN1ZXCV ZXCVFIXVIBETOKEN2ZXCV. Isto garante que se inclúa un token secreto único na solicitude, que o servidor valida despois na sesión do usuario. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG13 ### Riscos de fuga de tokens ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG14 Un detalle de implementación crítico é que ZXCVFIXVIBETOKEN0ZXCV nunca debe incluírse nos formularios dirixidos a URL externos ZXCVFIXVIBETOKEN1ZXCV. Ao facelo, filtraríase o token CSRF secreto a un terceiro, o que pode comprometer a seguridade da sesión do usuario ZXCVFIXVIBETOKEN2ZXCV. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG15 ## Defensa a nivel de navegador: cookies do mesmo sitio ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG16 Os navegadores modernos introduciron o atributo ZXCVFIXVIBETOKEN0ZXCV para a cabeceira ZXCVFIXVIBETOKEN1ZXCV para proporcionar unha capa de defensa en profundidade ZXCVFIXVIBETOKEN2ZXCV. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG17 - **Estricto:** a cookie só se envía nun contexto propio, o que significa que o sitio na barra de URL coincide co dominio da cookie ZXCVFIXVIBETOKEN0ZXCV. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG18 - **Lax:** A cookie non se envía en subsolicitudes entre sitios (como imaxes ou cadros), senón que se envía cando un usuario navega ao sitio de orixe, como seguindo unha ligazón estándar ZXCVFIXVIBETOKEN0ZXCV. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG19 ## Como proba ZXCVFIXVIBETOKEN0ZXCV para iso ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG20 ZXCVFIXVIBETOKEN1ZXCV agora inclúe protección CSRF como verificación activa activa. Despois da verificación do dominio, ZXCVFIXVIBETOKEN0ZXCV inspecciona os formularios que cambian de estado descubertos, comproba entradas en forma de token CSRF e sinais de cookies de SameSite, despois intenta enviar unha orixe falsificada de baixo impacto e só informa cando o servidor o acepta. As comprobacións de cookies tamén sinalan atributos débiles de SameSite que reducen a defensa CSRF en profundidade.

Cross-Site Request Forgery (CSRF) remains a significant threat to web applications. This research explores how modern frameworks like Django implement protection and how browser-level attributes like SameSite provide defense-in-depth against unauthorized requests.

CWE-352

Impact

Cross-Site Request Forgery (CSRF) allows an attacker to trick a victim's browser into performing unwanted actions on a different website where the victim is currently authenticated. Because browsers automatically include ambient credentials like cookies in requests, an attacker can forge state-changing operations—such as changing passwords, deleting data, or initiating transactions—without the user's knowledge.

Root Cause

The fundamental cause of CSRF is the web browser's default behavior of sending cookies associated with a domain whenever a request is made to that domain, regardless of the request's origin [S1]. Without specific validation that a request was intentionally triggered from the application's own user interface, the server cannot distinguish between a legitimate user action and a forged one.

Django CSRF Protection Mechanisms

Django provides a built-in defense system to mitigate these risks through middleware and template integration [S2].

Middleware Activation

The django.middleware.csrf.CsrfViewMiddleware is responsible for CSRF protection and is typically enabled by default [S2]. It must be positioned before any view middleware that assumes CSRF attacks have already been handled [S2].

Template Implementation

For any internal POST forms, developers must include the {% csrf_token %} tag inside the <form> element [S2]. This ensures that a unique, secret token is included in the request, which the server then validates against the user's session.

Token Leakage Risks

A critical implementation detail is that the {% csrf_token %} should never be included in forms targeting external URLs [S2]. Doing so would leak the secret CSRF token to a third party, potentially compromising the user's session security [S2].

Browser-Level Defense: SameSite Cookies

Modern browsers have introduced the SameSite attribute for the Set-Cookie header to provide a layer of defense-in-depth [S1].

  • Strict: The cookie is only sent in a first-party context, meaning the site in the URL bar matches the cookie's domain [S1].
  • Lax: The cookie is not sent on cross-site subrequests (such as images or frames) but is sent when a user navigates to the origin site, such as by following a standard link [S1].

How FixVibe tests for it

FixVibe now includes CSRF protection as a gated active check. After domain verification, active.csrf-protection inspects discovered state-changing forms, checks for CSRF-token-shaped inputs and SameSite cookie signals, then attempts a low-impact forged-origin submission and only reports when the server accepts it. Cookie checks also flag weak SameSite attributes that reduce CSRF defense-in-depth.