Heim >Backend-Entwicklung >Python-Tutorial >Warum schlägt meine Django-CSRF-Prüfung mit einer Ajax-POST-Anfrage fehl?

Warum schlägt meine Django-CSRF-Prüfung mit einer Ajax-POST-Anfrage fehl?

DDD
DDDOriginal
2024-12-04 13:41:14288Durchsuche

Why is My Django CSRF Check Failing with an Ajax POST Request?

Django CSRF-Prüfung schlägt mit Ajax-Post-Request fehl

Wie in der Dokumentation von Django beschrieben, trägt die Aktivierung des CSRF-Schutzes dazu bei, böswillige Cross-Site-Request-Angriffe zu verhindern. Durch Befolgen der Anweisungen haben Sie versucht, die CSRF-Prüfung mit Ajax-Posting zu implementieren, stoßen aber immer noch auf eine Ablehnung.

Um dieses Problem zu beheben, beachten Sie die folgenden Schritte:

  1. Token-Existenz überprüfen:
    Stellen Sie sicher, dass der JavaScript-Code das CSRF-Token abruft und es in einer Variablen namens speichert csrftoken. Dieses Token sollte vorhanden sein, bevor der Header festgelegt wird:

    $.post("/memorize/", data, function (result) { ... });
    
    var csrftoken = getCookie('csrftoken');
    xhr.setRequestHeader("X-CSRFToken", csrftoken);
  2. Token-Verwendung sicherstellen:
    Nachdem Sie das Token erhalten haben, legen Sie es explizit im Header für die Ajax-Anfrage fest mit setRequestHeader.
  3. Antworttext prüfen:
    Antworttext prüfen von Django, um zu sehen, ob explizit ein fehlendes oder ungültiges CSRF-Token erwähnt wird.
  4. Alternative Methode (unter Verwendung des Datenkörpers):
    Anstatt den Header festzulegen, können Sie ihn einbetten das CSRF-Token im Datenkörper der Ajax-Anfrage als folgt:

    $.ajax({
        data: {
            csrfmiddlewaretoken: '{{ csrf_token }}',
            ...  // Other data
        },
    });
  5. Debugging aktivieren:
    Aktivieren Sie den CSRF-Debugging-Modus von Django, indem Sie DEBUG = True zu den Einstellungen hinzufügen. Dies kann zu zusätzlichen Fehlermeldungen oder Hinweisen im Antworttext führen.

Sobald diese Schritte abgeschlossen sind, senden Sie die Ajax-Anfrage erneut, um zu sehen, ob die CSRF-Prüfung erfolgreich verläuft.

Das obige ist der detaillierte Inhalt vonWarum schlägt meine Django-CSRF-Prüfung mit einer Ajax-POST-Anfrage fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn