Ho bisogno del token CSRF e di come mi aggiunge protezione aggiuntiva (Angular / Node SPA)

1

Stavo leggendo su XSRF e mi piacerebbe assicurarmi di aver compreso correttamente il problema e sapere se la mia applicazione è protetta da quel tipo di attacco.

Come comprendo CSRF funziona:

  • aggiungendo una stringa casuale (?) che viene salvata nel tuo cookie dall'intestazione set-cookie o da un codice javascript (quindi non può essere solo HTTP quindi suppongo che sia meglio usare set-cookie ), in teoria è accessibile solo dal dominio che è stato impostato
  • quella stringa viene convalidata con ogni richiesta dell'API per garantire che la richiesta non venga effettuata da origini diverse

Soluzione che ho attualmente:

    La sessione
  • viene impostata dal server dopo l'autenticazione dell'utente (accesso) e il suo ID è impostato come cookie solo HTTPS
  • ID sessione è una stringa casuale lunga salvata nel DB con informazioni sulla stringa del browser utente user user, IP e user ID
  • JS non può accedere al cookie, tutte le richieste sono impostate con XMLHttpRequest.withCredentials per passare cookie al server
  • l'ID di sessione è validato con ogni richiesta anche contro user agent e IP
  • La sessione
  • è valida per 10 minuti, ma può essere estesa

Inoltre:

  • Ho impostato CSP per consentire il contenuto solo per alcuni domini attendibili
  • Ho configurato CORS per consentire solo le richieste di origini attendibili

Come vedo il mio ID di sessione si comporta un po 'come il token CSRF. Mi piacerebbe sapere che ho bisogno di un token CSRF aggiuntivo per evitare che XSRF o la soluzione che ho attualmente copra quella vulnerabilità in modo soddisfacente?

La sicurezza è un'area in cui sono nuovo e non mi sento sicuro di apprezzare qualsiasi aiuto.

    
posta LJ Wadowski 03.08.2016 - 12:47
fonte

1 risposta

2

Anche il token deve essere convalidato al di fuori del meccanismo dei cookie.

Dire evil.example.com aperto nel browser di Alice fa una richiesta cross-site a yoursite.example.org , quindi il browser invierà tutti i suoi cookie a yoursite.example.org , inclusi i cookie di sessione o eventuali altri cookie che potresti utilizzare per impedire CSRF.

Per mitigare questo, è necessario inviare il token usando anche un altro metodo (sto descrivendo il Double Submit Cookies perché è abbastanza semplice). Ad esempio, potresti includere un campo nascosto nel modulo:

<input type=hidden name=csrftoken value=12321231 />

Sul lato server è sufficiente verificare che il valore della sessione (o il valore del cookie) che si sta utilizzando per CSRF corrisponda a quello nel campo del modulo nascosto. Un utente malintenzionato non può quindi creare una richiesta perché non conosce questo valore, né può recuperarlo per l'utente corrente. Questo valore deve essere generato casualmente per sessione (utilizzando alcune fonti di entropia imprevedibile).

    
risposta data 03.08.2016 - 13:02
fonte

Leggi altre domande sui tag