Qual è la necessità del token di sicurezza per prevenire l'attacco CSRF?

5

Ho un'API REST che è in esecuzione in un dominio e ho un client in un altro dominio. Per impedire CSRF, ho configurato l'API REST per accettare la richiesta originata solo dall'applicazione client. Ho aggiunto la codifica corretta come da owasp foglio di prevenzione XSS per prevenire qualsiasi attacco XSS sulla mia applicazione. Posso dire che la mia API REST è al sicuro dall'attacco CSRF? Ho anche bisogno di un token di sincronizzazione per rendere sicura la mia API?

Come ho capito, CSRF o l'attacco XSS può portare all'attacco CSRF, poiché sto impedendo entrambi, la mia applicazione è vulnerabile a CSRF?

    
posta MShah 21.10.2013 - 13:44
fonte

2 risposte

6

Per prevenire CSRF il metodo più efficace è fornire un token CSRF insieme ad ogni richiesta. Questo è un token generato sul lato server e associato a una determinata sessione. Quindi, ogni volta che quella sessione invia una richiesta, il codice lato server verificherà che il token CSRF corretto sia stato inviato. In caso contrario, si è verificato un attacco CSRF e la richiesta verrà respinta.

Spesso questi token sono memorizzati in campi nascosti, ma se stai usando un'API REST, sospetto che stiate facendo molte chiamate AJAX e questo probabilmente non è il metodo migliore. Suggerirei di creare una variabile javascript globale che viene inizializzata con il token CSRF una volta e quindi acceduta ogni volta che si invia una richiesta. Se stai usando qualcosa come jQuery è abbastanza facile includere un altro parametro di richiesta in tutte le chiamate AJAX, quindi questa potrebbe essere un'opzione. Quest'ultimo è tipicamente quello che faccio, e rende molto più pulito il codice.

Ecco un link al foglio cheat di prevenzione CSRF di OWASP. Consiglierei di dargli una lettura.

    
risposta data 21.10.2013 - 17:38
fonte
5

Presumo che tu stia autenticando le richieste usando un cookie di sessione?

La verifica dell'intestazione di origine è una difesa CSRF valida, quindi non è necessario un token anti-CSRF. Il supporto del browser per l'intestazione di origine è piuttosto buono. Ma per essere sicuri devi respingere le richieste senza un'intestazione di origine, che bloccherà i browser non di supporto.

C'è molta confusione attorno a CSRF e XSS. È vero che gli attacchi XSS possono bypassare la protezione CSRF. Tuttavia, questo è in qualche modo fuorviante. Gli attacchi XSS possono portare a tutti i tipi di cose cattive e bypassare CSRF è solo uno di questi. Hai assolutamente ragione di proteggere dagli attacchi XSS.

Quindi il tuo design è fondamentalmente buono. Tuttavia, per verificare se la tua applicazione è vulnerabile devi anche confermare che la tua implementazione sia buona. Se disponi di un budget, assumi una società di test di penetrazione per verificarlo.

    
risposta data 21.10.2013 - 14:02
fonte

Leggi altre domande sui tag