2017-11-24 4 views
0

Kann mir jemand Beispiel, wie CSRF im Cluster-Setup funktioniert?Django CSRF in einem Cluster

Ich habe einen kubernetes Cluster Hosting eine Django-Website, und ich habe einige gelegentliche Probleme mit 403 Fehler. Ich habe mehrere Instanzen der Website Last in Kubernetes ausgeglichen.

Wie funktioniert CSRF, wenn ein POST von einer Instanz gesendet und von einer anderen Instanz bearbeitet wird?

Funktioniert die CSRF-Site, wenn die Docker-Images während des Ausfüllens des Formulars aktualisiert werden?

Danke!

+0

Sind Sie auf django 1.11 und CSRF_USE_SESSIONS = True durch Zufall mit? Ich nehme an, dass die Dienste auch von der gleichen Domäne bedient werden, z. B. werden sie alle von yoursite.com zugegriffen? –

+0

@ fabio.sussetto Immer noch auf 1.10 und CSRF_USE_SESSIONS nicht eingestellt – gmccoy

+0

Bitte beachten Sie meine andere Frage zu den oben genannten Domänen. Sind diese POST-Anfragen auch von einem Formular oder AJAX-Anfragen? –

Antwort

1

Kann mir jemand Beispiel, wie CSRF im Cluster-Setup funktioniert?

Genau so sollte es normalerweise nicht (CSRF ist Cross Site Request Forgery, d. H. Der Angriff). Um sich davor zu schützen, verteilen Sie geheime Tokens an Ihre Kunden, die sie bei späteren Anfragen einbeziehen müssen. Ihr Backend muss bestätigen, dass die Token gültig und anwendbar sind und tatsächlich von einer vertrauenswürdigen Quelle ausgestellt wurden. Es gibt ein paar Möglichkeiten, dieses Bit zu verwenden:

  • Sie können MACs für das verwenden (in diesem Fall haben Sie etwas ziemlich nah an JSON WebTokens).
  • Sie können Ihre Tokens in einem vertrauenswürdigen Speicher speichern und diesen Speicher bei nachfolgenden Anforderungen abfragen.
  • Das ist so ziemlich alle gibt es dazu.

    Da Ihr CSRF-Schutz aus der Kombination der oben getroffenen Auswahlmöglichkeiten hervorgeht, hängt es auch von der spezifischen Implementierung des CSRF-Schutzschemas ab, wie es in einem verteilten Setup funktioniert.

    Geht man von den Django-Dokumenten aus, verwendet die Standardmethode ein 'secret', das jedes Mal zurückgesetzt wird, wenn sich ein Benutzer anmeldet. Das bedeutet, wenn ein anderer Server für zwei aufeinander folgende Anfragen ein neues Login auslöst CSRF-Tokens werden effektiv ungültig gemacht. So basiert darauf, dass:

    • Sie benötigen eine Django-Projekt anzupassen, dass verschiedene Instanzen machen wieder aufnehmen kann, mit der gleichen Sitzung zu arbeiten, und eine erneute Anmeldung wird ausgelöst, nicht
    • Alle Ihre Django-Instanzen müssen in der Lage sein, um auf dasselbe pro Anmelde-Geheimnis zuzugreifen, so dass jedes von ihnen ein CSRF-Token validieren kann, das von einem anderen ausgegeben wurde.
    +0

    Werden die CSRF-Token von django in der Datenbank gespeichert? – gmccoy

    0

    Sie sollten CSRF deaktivieren für jede Instanz, und verwalten die CSRF Sicherheit von der API-Gateway