Ho una domanda in due parti qui.
Ho una webapp javascript che accede a endpoint REST privilegiati. Mi piacerebbe proteggere contro CSRF.
Attualmente, ho creato un sistema di login che restituisce un cookie di accesso contenente un carico utile crittografato (encrypt-then-MAC). Sono ragionevolmente sicuro che i contenuti dei cookie non possano essere manomessi o falsificati a mia insaputa.
So che l'utilizzo di detto cookie per proteggere i miei endpoint è vulnerabile a CSRF, poiché il cookie viene automaticamente inviato dal browser con qualsiasi richiesta. Credo inoltre che il pattern Double Submit Cookie sia scoraggiato perché richiede l'impostazione del valore HTTPOnly del cookie su False, che eleva il rischio di determinati attacchi.
Quello che vorrei fare è impostare il cookie auth (usato per gli accessi persistenti a medio termine) su HTTPOnly e Secure. Quindi, vorrei che il client javascript eseguisse una richiesta XHR GET su un endpoint del token in cui il cookie può essere convalidato e un token a breve termine (che contiene un handle che punta alle informazioni che ho nascosto nel mio DB) può essere emesso direttamente indietro al client, senza reindirizzamento da User Agent. Il client javascript utilizzerà quindi il token a breve termine per autorizzare le chiamate ai miei endpoint REST.
La mia prima domanda è: ci sono evidenti difetti con questo flusso? Sembra un adattamento ragionevole del modello di token di sincronizzazione per REST, ma mi piacerebbe sapere se ci sono gravi difetti o se ci sono altre buone pratiche in merito alla procedura.
Ho preso in considerazione l'implementazione del flusso di Grant implicito OAuth 2.0, ma vorrei che fosse presente il cookie auth in modo da poter mantenere gli accessi per un periodo di tempo limitato.
La seconda domanda è: il cookie HTTPOnly verrà inviato all'endpoint del token dal browser con il mio XHR se imposto conCredentials = True? So che HTTP esclude solo la capacità del javascript di leggere il cookie, ma il cookie verrà inserito nella richiesta, invisibilmente al client?
Ho cercato su Google la risposta, e il mio google-fu mi ha fallito. Tutto quello che ho trovato erano numerosi articoli su come leggere i cookie HTTPOnly, ma non inviarli.
Grazie in anticipo per qualsiasi aiuto o consiglio!