CodeIgniter CSRF confusione

4

Ho lavorato con CodeIgniter per circa 3 settimane e sto molto bene sulla strada per amare questo framework. Comunque ho visto il codice core del framework e stavo leggendo la protezione CSRF. Ho notato (la mancanza di) rigenerazione CSRF. Tutto ciò che fa è estendere la vita dei token. Questo mi sta rendendo molto nervoso. Ho giocato con i tempi di scadenza e non posso farla scadere una volta ogni due minuti. Renderebbe la mia applicazione inutilizzabile poiché si basa principalmente sull'invio di moduli.

La mia domanda è: perché qualcuno NON vorrebbe avere un token rigenerato per richiesta / per modulo?

È una buona pratica mantenere lo stesso token? Ho letto OWASP e, a parte i campi nascosti in una forma, altre soluzioni stanno usando CAPTCHA, ma in questo modo si interromperà anche la mia applicazione in quanto gli utenti non lo desiderano. Tutto sommato sono solo molto confuso sul perché sia così.

Solo per un po 'di informazioni extra questo è quello che sto facendo per prevenire eventuali perdite di informazioni:

  1. SSL / TLS (https) attraverso l'intera applicazione
  2. Rimuovi le firme del server sulle intestazioni
  3. imposta una chiave di crittografia a 64 chiavi per le informazioni personali e i cookie
  4. Xss filtro per tutti i post ottiene cookie
  5. convalida tutto
  6. Esci da qualsiasi cosa derivata dai dati immessi dall'utente.

e le seguenti sono le mie configurazioni per la sicurezza CI:

    $config['cookie_secure']    = TRUE; // Send cookies only over HTTPS
    $config['global_xss_filtering'] = TRUE; // Global xss filter (input only- i escape output when needed) 
    $config['sess_encrypt_cookie']  = TRUE; // "encrypts" session with my 64 Character encryption key
    $config['sess_time_to_update']  = 10; // regenerate session id every 10 seconds

Scusa se questo post è lungo e completo, voglio solo assicurarmi che sto prendendo tutti i passaggi necessari nella sicurezza delle applicazioni.

Grazie

    
posta RaGe10940 18.02.2013 - 22:38
fonte

1 risposta

4

In quali condizioni dovrebbe un'applicazione rigenerare un token di sincronizzazione CSRF?

L'attributo più importante è che questo valore non può essere indovinato da un utente malintenzionato e quindi unico per una sessione. I token di sincronizzazione sono comunemente sconfitti usando XSS. Un buon esempio è il worm XS Sammy MySpace , che legge il token CSRF utilizzando un XHR e ha inoltrato la richiesta. Quindi, anche se il token di sincronizzazione è stato rigenerato per ogni pagina , ricadrebbe comunque in un attacco XSS. (Anche le variabili cookie non sono un vettore per XSS perché un utente malintenzionato non può controllare queste variabili nella richiesta.)

Un utente malintenzionato ha il vantaggio di poter effettuare un numero molto elevato di richieste. È possibile che un utente malintenzionato sia in grado di indovinare il token CSRF utilizzato. Allo stesso modo è anche possibile per un utente malintenzionato potenzialmente indovinare l'ID di sessione utilizzato. Entrambi questi attacchi hanno un impatto identico, un utente malintenzionato può eseguire un'azione come tale utente. Ci dovrebbe essere un timeout per prevenire entrambi questi attacchi, ma questo valore varia sulla tua applicazione. Si tratta di un'applicazione bancaria che si occupa di denaro? Che dovrebbe scadere una sessione dopo circa 20 minuti O è solo un forum con un impatto limitato sulla sicurezza, in tal caso forse 24 ore.

    
risposta data 18.02.2013 - 23:48
fonte

Leggi altre domande sui tag