Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

375
Vistas
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.

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

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.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda