Django: CSRF-Token für alle Antworten erzwingen

10

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%     
Tzach 26.08.2015, 16:10
quelle

1 Antwort

1

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:

  1. Der Server setzt ein Cookie mit einem zufälligen Wert in der Antwort
  2. Ihre Website liest diesen Wert und sendet ihn beim Posten von Daten an den Server
  3. Da auf Cookies nur von der gleichen Domain aus zugegriffen werden kann, in der sie gesetzt wurden, ist es für eine andere Site nicht möglich, dieses Cookie zu lesen. Wenn Sie also eine Anfrage mit dem richtigen csrf-Token erhalten, können Sie sicher sein, dass diese Anfrage von Ihrer Site kommt.

Eine sehr gute Erklärung von CSRF finden Sie in diesem Artikel: Ссылка

    
tomas 25.10.2015, 00:00
quelle

Tags und Links