Ho bisogno del token CSRF se sto usando Bearer JWT?

16

Contesto : il sito angolare è ospitato su S3 dietro CloudFront, separato dal server Express utilizzato come API e quasi tutte le richieste sono XMLHttpRequests. Tutte le richieste vengono inviate senza cookie (con Credentials = false di default) e io uso il token Bearer JWT per l'autenticazione prendendolo dai cookie in angolare e posizionandolo su Authorization header (Questa tecnica è un po 'come descritto in Cki Wiki pagina ).

Nel sito Express non ammetto l'intestazione Cookie in Access-Control-Allow-Headers .

I cookie hanno il flag secure: true e NON sono httpOnly perché è necessario accedervi manualmente in modo angolare.

Ho letto anche questo articolo Medium che i token JSON-Web-Tokens (JWT) / Bearer

is without a doubt one of the best methods of preventing CSRF

Domanda 1 : aggiungerò ulteriore sicurezza se aggiungerò l'intestazione X-XSRF-Token ad ogni richiesta e ad esempio rendere il meccanismo stateless controllando lo stesso valore nel carico utile JWT? (Ne ho letto in questo thread )

Domanda 2 : ho davvero bisogno di ulteriori sforzi di sicurezza CSRF riprendendo tutto ciò che ho descritto?

    
posta Igor Pomogai 29.09.2017 - 14:25
fonte

3 risposte

8

Questo è rilevante ma non risponde necessariamente al 100% della tua domanda:

link

In breve, finché l'autenticazione non è automatica (tipicamente fornita dal browser), non devi preoccuparti della protezione CSRF. Se l'applicazione sta allegando le credenziali tramite un'intestazione Authorization , il browser non può autenticare automaticamente le richieste e CSRF non è possibile. Pertanto, ridicherei leggermente la citazione dal tuo articolo: non è che i Token Bearer siano la migliore difesa contro gli attacchi CSRF, ma semplicemente che CSRF è un vettore di attacco che attacca specificamente le richieste in cui il browser fornisce automaticamente l'autenticazione (tipicamente i cookie e autenticazione di base), quindi CSRF non importa se il browser non può autenticarti.

Probabilmente dovresti assicurarti e verificare, lato server, che la tua applicazione non stia tornando silenziosamente alla convalida dei cookie se il token Bearer è assente. Potrei vedere una cosa del genere cigolare in un'applicazione accidentalmente, e dato che i cookie verranno mandati avanti se li vuoi o no, potrebbe causare una vulnerabilità CSRF inavvertita su una pagina che è "supposta" essere immune a CSRF.

Di conseguenza, penso che entrambe le tue domande una e due possano essere risolte allo stesso modo. Se si utilizza l'autenticazione solo tramite token Bearer e non tramite cookie, la vulnerabilità di CSRF non interessa e non sono necessari passaggi aggiuntivi per la sicurezza.

    
risposta data 29.09.2017 - 21:39
fonte
6

Generalmente, CSRF si verifica quando un browser aggiunge automaticamente le intestazioni (cioè: ID sessione all'interno di un cookie), quindi rende la sessione autenticata. I token al portatore o altri token basati su intestazione HTTP che devono essere aggiunti manualmente, potrebbero impedire l'accesso a CSRF.

Ovviamente, ma una sorta di off-topic, se si dispone di una vulnerabilità XSS, un utente malintenzionato potrebbe comunque accedere a questi token, ma in seguito non diventerà un bug CSRF.

    
risposta data 29.09.2017 - 18:33
fonte
2

Le risposte precedenti sono solide. Salterò qui per fornire un contesto più ampio e un piccolo avvertimento. Esistono molti modi per utilizzare JWT; la gestione delle sessioni è una di queste. Anche se presenta alcuni inconvenienti in caso di timeout e requisiti avanzati come la ri-autenticazione.

Inoltre, ho visto JWT inserito in cookie . Come altri hanno affermato, la protezione CSRF non viene dall'uso di un JWT stesso. Proviene dall'invio come intestazione Autorizzazione , utilizzando lo schema Portatore [JWT] .

Question 1: Will I add extra security if I'll add X-XSRF-Token header to each request and for example make the mechanism stateless by checking for that same value in JWT payload? (I've read about it in this thread)

Se lo stai inviando tramite XHR come intestazione Autorizzazione, nessun'intestazione X-XSRF-Token aggiuntiva non aggiungerà la sicurezza "extra" .

Question 2: Do I need extra security efforts against CSRF taking all that I described?

No , la configurazione corrente è ok.

Qualche tempo fa ho compilato una guida alle tecniche di autenticazione web e le relative proprietà di sicurezza ( ha anche una parte JWT ). Ecco il foglio trucchi finale che descrive tutti i metodi in un formato compatto.

    
risposta data 07.01.2019 - 06:36
fonte

Leggi altre domande sui tag