Supponiamo che l'autore dell'attacco sia stato in grado di iniettare JavaScript nel sito web. Ovviamente può fare qualsiasi richiesta HTTP per fare il backend di imitare le azioni dell'utente, a meno che non ci sia una conferma come il codice SMS che richiede l'interazione diretta da parte dell'utente (anche in questo caso il JavaScript dannoso potrebbe ingannare l'utente). Quindi, immagino, questo vettore di attacco non possa essere ragionevolmente difeso. Ma se l'attaccante ruba una sessione, può impersonare l'utente e fare quasi tutto. Quindi sto pensando alla difesa di questo vettore. Certo, il server potrebbe controllare l'indirizzo IP, ecc., Ma non è sempre possibile.
Prima cosa: memorizzare la sessione in un cookie solo HTTP. JavaScript non può rubarlo. Fin qui tutto bene. Ma c'è un altro punto debole: il sito Web di terze parti può creare tag con azioni dal mio server e inviare questo modulo con il cookie dell'utente. Si potrebbero usare token CSRF, ma ancora dovrebbero essere disponibili per JavaScript, potrebbero essere rubati se JavaScript viene compromesso, devono essere mantenuti sul server web, il che danneggia la scalabilità, ecc. Sto pensando di usare il metodo PUT per ogni azione REST (beh, non sarà un REST corretto ovviamente, chiamiamolo API HTTP). Non c'è modo di indurre l'utente a emettere la richiesta PUT dal sito web di terze parti e il cookie solo HTTP impedirà il furto del valore del cookie.
Non vedo questo utilizzo, quindi credo che mi manchi qualcosa e ci dovrebbe essere un modo più semplice per proteggere gli endpoint?