Meine Website hat eine AJAX POST-Ansicht, die von jeder Seite der App aufgerufen werden kann (Ereignisverfolgung). Diese Ansicht ist durch CSRF geschützt. In einigen Fällen ist das CSRF-Cookie nicht gesetzt und der POST-Aufruf schlägt fehl.
Anstatt alle Ansichten mit @ensure_csrf_cookie
, manuell zu dekorieren, denke ich daran, zu schreiben. Ich habe eine Middleware erstellt, die Django dazu verpflichtet, den CSRF-Cookie auf alle Antworten zu setzen. Ist dieser Ansatz richtig? Erstellt es eine Sicherheitslücke, die mir nicht bekannt ist?
Update: Hier ist der Middleware-Code:
%Vor%Nein, es gibt kein Problem, solange Sie das csrf-Token nicht in einem Formular rendern, das an eine externe Site sendet (aber das wäre sowieso ein Problem, egal wo Sie es implementieren). Sie können es auf einer Middleware oder einigen Ansichten oder auf allen Ansichten festlegen, es spielt keine Rolle.
Der CSRF-Schutz dient nur dazu, sicherzustellen, dass die Anfrage von Ihrer Site kommt. Unabhängig davon, wie oft Sie den Cookie gesetzt haben, bedeutet dies, dass die Anfrage tatsächlich von Ihrer Site kommt, wenn die Anfrage das korrekte CSRF-Token enthält, da nur Ihre Site auf Ihre Cookies zugreifen kann. (Dies gilt natürlich nur, wenn Sie das CSRF-Token nicht an Dritte weitergeben, z. B. indem Sie es an andere Sites senden)
In wenigen Worten funktioniert das so:
Eine sehr gute Erklärung von CSRF finden Sie in diesem Artikel: Ссылка
Tags und Links python django csrf django-csrf