Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

385
Views
Abrir una nueva pestaña del navegador invalida el token CSRF de Django, lo que impide el envío de formularios

Al abrir una aplicación Django 1.10 en una segunda pestaña del navegador, se actualiza el token CSRF. Esto rompe todos los formularios en la primera pestaña, es decir, los formularios abiertos anteriormente ya no se pueden enviar porque el antiguo token CSRF ahora no es válido.

¿Cómo evito este comportamiento?

Ejemplo paso a paso:

  1. El usuario está viendo un formulario en la pestaña A.
  2. El usuario abre la aplicación en la pestaña B.
  3. El usuario vuelve a la pestaña A e intenta enviar el formulario.
  4. Error: Prohibido (403). La verificación CSRF falló. Solicitud abortada.

Algunos detalles:

Realmente me gustaría permitir la navegación en varias pestañas en la aplicación.

Las notas de la versión de Django 1.10 documentan un cambio en el mecanismo CSRF:

Para protegerse contra los ataques de BREACH, el mecanismo de protección CSRF ahora cambia el valor del token de formulario en cada solicitud (mientras mantiene un secreto invariable que se puede usar para validar los diferentes tokens).

La documentación CSRF 1.9 de Django tiene una muy buena descripción del problema de usabilidad. Este párrafo se eliminó en la documentación de 1.10 CSRF , pero parece describir el problema exacto que estoy encontrando:

¿Por qué no usar un nuevo token para cada solicitud?

Generar un nuevo token para cada solicitud es problemático desde la perspectiva de la interfaz de usuario porque invalida todos los formularios anteriores. La mayoría de los usuarios se sentirían muy descontentos al descubrir que abrir una nueva pestaña en su sitio ha invalidado el formulario que acababan de llenar en otra pestaña o que no se pudo completar un formulario al que accedieron a través del botón Atrás.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Si está usando el decorador @csrf_protect en sus vistas, intente usar el decorador @csrf_exempt en su lugar.

Antes de views.py :

 from django.views.decorators.csrf import csrf_protect @csrf_protect def view(request): # Render Something

Después de vistas.py :

 from django.views.decorators.csrf import csrf_exempt @csrf_exempt def view(request): # Render Something

Lo siento por la respuesta tardía. Más vale tarde que nunca, espero.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!