2009-05-23 5 views
7

Wir entwickeln derzeit eine vollständig auf AJAX basierende App, die über eine RESTful-API mit dem Server interagieren wird. Ich habe mögliche Schemata zum Schutz vor XSRF-Angriffen gegen die API in Betracht gezogen.XSRF-Schutz in einer AJAX-App

  1. Benutzer authentifiziert und erhält eine Session-Cookie, das mit jeder Anforderung auch Doppel vorgelegt.

  2. Wir ein OAuth Verbraucher in Javascript implementieren, ein Token abrufen, wenn sich der Benutzer anmeldet, und alle Anfragen mit diesem Token anmelden.

Ich bin Neigung in Richtung des OAuth Ansatzes, vor allem, weil ich 3rd-Party-Zugriff auf unsere API zur Verfügung zu stellen möchte und ich würde lieber nicht zwei Authentifizierungsschemata zu implementieren.

Gibt es einen Grund, warum ein OAuth-Benutzer in dieser Situation nicht arbeiten würde?

Antwort

0

Der einfachste Weg, XSRF zu verhindern, dass er den Referer jeder RESTful-Anfrage überprüft, um sicherzustellen, dass die Anfrage von derselben Domain kommt. Der Sitzungscookie ist wichtig, um den Status beizubehalten, aber er wird sich nicht gegen XSRF verteidigen, da er auch mit einer gefälschten Anfrage gesendet wird. Es ist üblich, Referrer-basierte XSRF-Schutz-System auf Embedded-Netzwerk-Hardware mit begrenzten Speicheranforderungen zu sehen, verwendet Motorola diese Methode auf den meisten ihrer Hardware. Dies ist nicht der sicherste XSRF-Schutz, Token-basierter Schutz ist besser, aber beide Systeme können immer noch mit XSS umgangen werden. Das größte Problem mit dem tokenbasierten XSRF-Schutz ist, dass es viel Zeit braucht, um zurückzugehen und jede Anfrage zu reparieren, und Sie werden wahrscheinlich ein paar Anfragen verpassen.

Stellen Sie sicher, dass Sie die same origin policy und scan your site for xss lesen. Sie sollten auch die OWASP Top 10 für 2010 A3-Broken Authentication and Session Management lesen. ": XMLHttpRequest X-Requested-With", die in einem basischen XSRF Angriff zu fälschen ist schwierig (wenn auch möglich, wenn mit XSS kombiniert)

4

Die meisten AJAX-Bibliotheken einen zusätzlichen Header gesetzt. Die Überprüfung, ob dieser Header vorhanden ist, ist eine gute Tiefenverteidigungsstrategie, wenn Sie erwarten, dass alle Ihre Anfragen AJAX sind.

1

Verwenden Sie eine Anfrage in zwei Schritten, wobei der erste nach dem Server fragt, der nicht vorhersehbar ist, und der zweite nach der richtigen Aktion mit dem Token fragt.

Da der Angreifer das Token nicht vorhersehen kann und es nicht lesen kann (gleiche Ursprungsrichtlinie), kann er in der zweiten Abfrage kein gültiges Token angeben.

Aber Vorsicht Token nicht lecken (mit über die Erfassung json lernen, wenn sie Wert auf eine globale Variable und so weiter beeinflussen) und lesen:

http://www.google.com/search?q=xsrf+defence

Verwandte Themen