Heim >Backend-Entwicklung >Python-Tutorial >Warum schlagen meine AJAX-POST-Anfragen bei einer Django-CSRF-Prüfung fehl?

Warum schlagen meine AJAX-POST-Anfragen bei einer Django-CSRF-Prüfung fehl?

DDD
DDDOriginal
2024-12-08 05:38:09175Durchsuche

Why Do My AJAX POST Requests Fail with a Django CSRF Check?

Django CSRF Check Failure with Ajax POST Requests

Einführung:

Django implementiert einen Build -in-Mechanismus zum Schutz vor Cross-Site Request Forgery (CSRF)-Angriffen. Allerdings kann dieser Schutz manchmal AJAX POST-Anfragen beeinträchtigen. In diesem Artikel wird das Problem erläutert und eine Lösung bereitgestellt.

Problem:

Eine AJAX POST-Anfrage an eine Django-Ansicht kann aufgrund von Djangos CSRF mit dem Fehler 403 Forbidden fehlschlagen Schutz. Der Fehler tritt auf, wenn das CSRF-Token in der Anfrage nicht mit dem von Django generierten übereinstimmt.

Ursache:

Ajax-Anfragen (mit JavaScript) senden das möglicherweise nicht automatisch CSRF-Token im Anforderungsheader, was dazu führt, dass die CSRF-Prüfung fehlschlägt Django.

Lösung:

Um das Problem zu beheben, fügen Sie das CSRF-Token manuell zum Datenkörper der Ajax-Anfrage hinzu. Dies kann mithilfe der $.ajax-Funktion mit der Dateneigenschaft erfolgen:

$.ajax({
    data: {
        somedata: 'somedata',
        moredata: 'moredata',
        csrfmiddlewaretoken: '{{ csrf_token }}'
    },
    ...  // other Ajax options
});

Überprüfung:

Um zu überprüfen, ob das Token korrekt ist, können Sie das überprüfen Wert des csrfmiddlewaretoken-Cookies, bevor Sie die Ajax-Anfrage stellen. Dieses Cookie enthält das CSRF-Token.

Alternative:

Wie in der ursprünglichen Frage erwähnt, ist das Deaktivieren der CSRF-Prüfung für die Ansicht mithilfe des csrf_exempt-Dekorators kein idealer Ansatz . Es wird empfohlen, die Einhaltung des CSRF-Schutzmechanismus sicherzustellen.

Das obige ist der detaillierte Inhalt vonWarum schlagen meine AJAX-POST-Anfragen bei einer Django-CSRF-Prüfung 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