Pregunta

Tengo una aplicación web Django que tiene tanto un front-end, componente accesible desde la web y una API que se accede por un cliente de escritorio. Sin embargo, ahora con el nuevo componente middleware CSRF, solicitudes de API del cliente de escritorio que son POST'ed obtienen un 403.

entiendo por qué ocurre esto, pero ¿cuál es la forma correcta de arreglar esto sin comprometer la seguridad? ¿Hay alguna manera que puede ser señal en la cabecera HTTP que se trata de una solicitud de API y que Django no se debe comprobar para CSRF o es que una mala estrategia?

Editar -

El método que estoy usando en este momento es que el cliente de escritorio establece un encabezado, X-solicitada-Con: XMLHttpRequest. Esto es un poco hacky, pero no estoy seguro de cómo se manejaría mejor.

¿Fue útil?

Solución

¿Qué tal disociación de una vista (s) de tu cliente de escritorio y decorarlas con csrf_exempt ?

Otros consejos

Si está utilizando una vista basada Clase continuación, tendrá que csrf_exempt el método de despacho en lugar del método post como este:

@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
    return super(MyView, self).dispatch(request, *args, **kwargs)

Vea este billete de errores: https://code.djangoproject.com/ticket/15794

Desde Django 1.1, el código CSRF permitirá automáticamente peticiones AJAX para pasar a través, ya que los navegadores parecen hacer los controles de seguridad adecuados. Aquí está el original de cometer y la documentación .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top