Frage

Also, was ist der beste Weg, um einen XSRF Angriff für eine GAE Anwendung zu verhindern? Stellen Sie sich vor wie folgt vor:

  1. Jeder kann ein Benutzer öffentliches Objekt sehen, und die db.Model-ID in der Anforderung verwendet wird, die, um herauszufinden, um zu zeigen, widersprechen. Böswillige Benutzer haben nun die ID.
  2. bösartiger Benutzer erstellt ihr eigenes Objekt und prüft das Lösch Formular aus. Sie wissen nun, wie ein Objekt mit einer bestimmten ID zu löschen.
  3. bösartiger Benutzer erhält unschuldiger Benutzer eine Löschanfrage für den Benutzer des Objekts senden.

Welche Schritte kann ich hinzufügen 3 # zu verhindern? Beachten Sie, dass, wenn ich ID sagen, ich bin die tatsächliche ID Teil des Schlüssels. Eine Idee, die ich hatte, war den vollständigen Schlüsselwert in Löschanfragen zu verwenden, würde aber, dass ein böswilligen Benutzer verhindern, daß dies herauszufinden? Soweit ich weiß, ist der Schlüssel eine Kombination der Modellklasse-Typ, der App-ID und die Objektinstanz-ID, so konnten sie wahrscheinlich den Schlüssel aus dem id ableiten, wenn sie wollten.

Jede andere Ideen? Jeff schrieb rel="noreferrer">, und schlug vor, ein paar Methoden - eine versteckte Form Wert das würde auf jede Anfrage ändern, und ein Cookie-Wert über js in das Formular geschrieben. Ich werde nicht nicht-javascript Benutzer ausschließen möchten, so dass die Cookie-Lösung ist nicht gut - die versteckten Form Wert, hätte ich bei jeder Anfrage einen Datenspeicher schreiben tun, die einen löschbaren Objekt angezeigt - keine ideale Situation für eine skalierbare app!

Jede andere Ideen da draußen?

Andere Tipps

Ganz einfach: Schauen Sie sich die Referer. Es ist (absichtlich) unmöglich, dies mit Javascript zu setzen, HTML-Formulare, etc. Wenn es leer ist oder von Ihrer eigenen Seite (einige Proxies und Browsern referers Streifen) - oder genauer gesagt von der erwarteten Quelle - lassen Sie es. Andernfalls leugnen und es loggt sein.

Edit: Jeff hat einen Followup Artikel mit ein paar Möglichkeiten CSRF-Angriffe zu verhindern.

In Serverantwort Anzeige die Form einen magischen Hash erstellen (basierend auf Client-IP + Datum / Uhrzeit + zufälliges Salz, was auch immer). Legen Sie es in einem Cookie und speichern irgendwo auf dem Server. Während einreichen Aktion Handhabung das Cookie-Hash gegen den Datenbank-Eintrag überprüfen.

Wenn es gibt nicht so Hash oder es ist anders, lehnt die Vorlage.

Nach der erfolgreichen einreichen können Sie den Hash-Eintrag entfernen, ändern Sie es Staat eingereicht -. Was auch immer zu Ihnen passt

Diese Methode sollten Sie in vielen Fällen schützen, aber sicher noch nicht zu 100% kugelsicher.

Führen Sie eine Suche nach Artikeln über CSRF, vielleicht werden Sie einige gute Antworten zu diesem Stack-Überlauf, was . ;)

Macht keine Referrer-Kontrollen oder Client-IP-Validierungen - es ist zu fehleranfällig (die Referrer-Informationen können durch die User-Agenten gelöscht werden, ein Proxy oder durch die Präferenzen des Nutzers) und Client-IP kann zwischen der Erstellung von Formularen und Einreichung ändern -. bestraft den Benutzer nicht für dynamische IP-Adresszuweisung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top