2009-05-23 19 views
7

Attualmente stiamo sviluppando un'applicazione interamente basata su AJAX che interagirà con il server tramite un'API RESTful. Ho considerato potenziali schemi di protezione dagli attacchi XSRF contro l'API.Protezione XSRF in un'app stile AJAX

  1. autentica l'utente e riceve un cookie sessione, che è anche doppio presentata ad ogni richiesta.

  2. implementiamo un consumatore OAuth in Javascript, recuperare un gettone quando l'utente accede, e firmare tutte richieste con quella pedina.

sto sporgendosi verso l'approccio OAuth, soprattutto perché mi piacerebbe fornire l'accesso 3rd party al nostro API e Preferirei non dover implementare due schemi di autenticazione.

C'è qualche motivo per cui un utente OAuth non potrebbe funzionare in questa situazione?

risposta

0

Il modo più semplice per impedire a XSRF di controllare il riferimento di ogni richiesta RESTful per assicurarsi che la richiesta provenga dallo stesso dominio. Il cookie di sessione è importante per mantenere lo stato, ma non lo difenderà da XSRF perché verrà inviato anche con una richiesta falsificata. È comune vedere il sistema di protezione XSRF basato su referer su hardware di rete embedded con requisiti di memoria limitati, Motorola utilizza questo metodo sulla maggior parte del proprio hardware. Questa non è la protezione XSRF più sicura, la protezione basata su token è migliore, ma entrambi i sistemi possono ancora essere bypassati con XSS. Il problema più grande con la protezione XSRF basata su token è che ci vuole un sacco di tempo per tornare indietro e correggere ogni richiesta e probabilmente ci mancheranno alcune richieste.

Assicurarsi di leggere su same origin policy e su scan your site for xss. Dovresti anche leggere l'OWASP Top 10 per il 2010 A3-Broken Authentication and Session Management.

4

La maggior parte delle librerie AJAX imposterà un'intestazione aggiuntiva "X-Requested-With: XMLHttpRequest", che è difficile da simulare in un attacco XSRF di base (anche se possibile se combinato con XSS). Verificare che questa intestazione esista è una buona strategia di difesa in profondità se ti aspetti che tutte le tue richieste siano AJAX.

1

Utilizzare una richiesta in due passaggi, la prima che richiede al server un token imprevedibile, la seconda che richiede l'azione reale con il token.

Poiché l'autore dell'attacco non è in grado di prevedere il token e non può leggerlo (criterio di origine identico), non può fornire un token valido nella seconda query.

Ma attenzione a non perdere i token (conoscere catturare JSON utilizzando quando colpiscono valore a una variabile globale e così via) e leggere:

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