Si tratta di un metodo anti-CSRF appropriato?

3

Ho installato il seguente sistema sulla mia app Web e vorrei sapere se è sicuro.

  1. Cookie contiene token CSRF.
  2. L'applicazione rileva il token CSRF nel cookie.
  3. L'applicazione posiziona il token in un'intestazione.
  4. Il token nell'intestazione è verificato dal server.

Non ho visto alcuna informazione definitiva sull'opportunità o meno di utilizzare i cookie come luogo in cui memorizzare i token CSRF. Per favore, illuminami.

MODIFICA: Ulteriori dettagli - Angolare cerca un token CSRF nei cookie e, quando ne trova uno, aggiunge un'intestazione con questo valore. Quindi il server determina se il valore dell'intestazione è legittimo.

    
posta Jack 09.07.2015 - 17:41
fonte

2 risposte

1

Non vedo alcun difetto nel metodo e penso che possa essere usato per proteggere contro CSRF. C'è solo un piccolo problema: questo metodo funzionerà benissimo fintanto che il cookie che memorizza il token CSRF è NOT impostato come HTTPOnly . Il problema è con questo requisito:

Application detects/places token.

Questa implementazione è simile a Double Submit Cookies . Il doppio invio dei cookie è definito come l'invio di un valore casuale sia in un cookie sia come parametro di richiesta, con il server che verifica se il valore del cookie e il valore della richiesta sono uguali. Il vantaggio di utilizzare questo metodo è che l'applicazione non deve salvare questo valore in alcun modo.

Poiché l'implementazione richiede che il valore del cookie sia letto tramite script sul lato client (JavaScript) e quindi inserito come intestazione della richiesta, può interrompere la funzionalità dell'applicazione se è impostato come HttpOnly (che impedisce JavaScript dalla lettura del suo valore) in qualsiasi momento.

    
risposta data 09.07.2015 - 20:59
fonte
1

Sì, l'aggiunta di un'intestazione personalizzata, anche senza token e utilizzando uno statico come X-Requested-With: XMLHttpRequest protegge intrinsecamente contro CSRF perché non è possibile passare le intestazioni personalizzate tra domini diversi senza abilitare CORS sul server.

Se esiste una relazione one-to-one dal tuo dominio di interfaccia utente al tuo dominio API (o che sono lo stesso dominio), l'aggiunta di qualsiasi intestazione personalizzata ridurrà il CSRF.

Se hai intenzione di utilizzare la tua API per servire più siti Web, probabilmente non attendibili, allora dovrai assicurarti che uno dei siti web che stai supportando non possa fare richieste API per conto di un altro, quindi il tuo approccio token in un'intestazione è più adatta a questo. Il token può quindi essere convalidato per garantire che corrisponda sia alla sessione utente sia che abbia una chiave API valida dal sito Web utilizzato per il front-end. Tuttavia, questo sarebbe meglio adattarsi al modello Modello token sincronizzatore piuttosto che Double Invia cookie.

    
risposta data 27.09.2015 - 12:33
fonte

Leggi altre domande sui tag