Frage

Ich habe eine Django Webapp, die beide haben eine Front-End, das Internet zugängliche Komponente und eine API, die von einem Desktop-Client zugegriffen wird. Aber jetzt mit der neuen CSRF Middleware-Komponente, API-Anfragen aus dem Desktop-Client, sind POST'ed ein 403 erhalten.

Ich verstehe, warum dies geschieht, aber was ist der richtige Weg, dies zu beheben, ohne die Sicherheit zu gefährden? Gibt es irgendwie kann ich im HTTP-Header signalisiert, dass es eine API-Anforderung und dass Django sollte nicht für CSRF checken oder ist das eine schlechte Strategie?

Bearbeiten -

Die Methode, die ich im Moment bin ist, dass das Desktop-Client einen Header setzt, X-Requested-With: XMLHttpRequest. Das ist ein bisschen hacky, aber ich bin nicht sicher, wie dies besser behandelt werden würde.

War es hilfreich?

Lösung

Wie wäre es nur eine Sicht (en) für den Desktop-Client abspaltet und Dekorieren sie mit csrf_exempt ?

Andere Tipps

Wenn Sie eine Klasse Basierend Ansicht verwenden, dann müssen Sie den Versandweg csrf_exempt anstatt die post-Methode wie folgt aus:

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

diesen Fehler Ticket anzeigen: https://code.djangoproject.com/ticket/15794

Da Django 1.1 wird der CSRF-Code automatisch AJAX-Anfragen durchlassen, da Browser der richtigen Sicherheitskontrollen zu tun scheinen. Hier ist die Original verpflichten und die Dokumentation .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top