Would this approach actually work to prevent CSRF attacks?
Sì. Un utente malintenzionato non può fare in modo che un browser invii una richiesta che includa l'intestazione di autorizzazione con il token al portatore corretto. Questo è per due motivi:
- L'autore dell'attacco non può impostare l'intestazione authroization.
- L'autore dell'attacco non conosce il valore corretto del token, quindi non saprebbero a cosa impostarlo.
Tuttavia, questo potrebbe essere sensibile alle modifiche apportate all'applicazione. Ad esempio, se un giorno qualcuno decide di cambiare il sistema di autenticazione in base a un cookie, potrebbe non rendersi conto che sta disattivando la protezione CSRF facendo così.
Inoltre, nel caso in cui il valore dell'intestazione richiesto sia prevedibile, un criterio CORS che consente di impostare l'intestazione potrebbe causare problemi.
Per quanto riguarda la domanda SO collegata, non sono sicuro di aver compreso la risposta accettata. Ma se guardi la seconda risposta , la tua situazione è di tipo 2 e non di tipo # 1.
I know If I am vulnerable to XSS attacks my cookies can be read and the bearer tokens can be stolen. But can the injected XSS create a the Authorization: Bearer header and append the stolen value from cookie?
Sì, puoi farlo se puoi inserire codice.
Se si dispone di una vulnerabilità XSS, consentirà all'utente malintenzionato di aggirare qualsiasi protezione CSRF inserita. Quindi le preoccupazioni per XSS non possono essere realmente utilizzate per favorire una forma di protezione CSRF rispetto a un'altra - a fronte di XSS sono tutte nulle.
Una leggera differenza è che il tuo token non può essere contrassegnato come solo HTTP, dal momento che devi accedervi da JS per inserirlo nell'intestazione. Di conseguenza, un utente malintenzionato XSS può rubarlo e quindi inviare comodamente richieste dal proprio computer. Se il token di autenticazione è HTTP, solo l'hacker deve fare in modo che il codice inserito invii le richieste, il che è un po 'complicato ma non impossibile.