Sicurezza CSRF indipendente dal front-end

Sep 29 2020

Sto cercando di capire se comprendo perfettamente la sicurezza CSRF. Basato su:

https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html

In tutti gli scenari, sembra che il tuo frontend debba avere il token CSRF da qualche parte in modo che quando una richiesta viene inviata al backend, possa confrontare sia il token csrf nel cookie / sessione che nella richiesta. In questo modo, quando un utente malintenzionato tenta di creare una richiesta per conto di un utente connesso, poiché non ha il token nella richiesta, non verrà convalidato.

Ciò significa che per l'implementazione CSRF è necessario configurare sia il front che il backend.

Ora diciamo che voglio che tutta la sicurezza CSRF venga eseguita sul backend, è possibile, non cambiando frontend?

Inoltre, se la mia applicazione frontend è separata dal backend, devo comunque essere preoccupato per gli attacchi CSRF?

Risposte

multithr3at3d Sep 29 2020 at 05:33

Sì, un metodo per garantire la protezione CSRF è controllare le intestazioni Origin e Referrer per vedere se corrispondono all'origine prevista, poiché queste intestazioni non possono essere sovrascritte da alcun codice frontend. Tuttavia, l'intestazione di origine viene inviata solo su richieste POST o CORS e le implementazioni del browser di queste intestazioni non sono state storicamente coerenti; ad esempio, possibilmente consentendo a JavaScript di falsificare una o più intestazioni (i browser moderni dovrebbero comportarsi correttamente, anche se non posso parlare per le specifiche o l'implementazione futura).

Questa protezione richiede solo l'implementazione di un controllo lato server su ogni richiesta POST. È importante negare la richiesta se l'origine inviata non corrisponde o se non è stata inviata affatto.

Il Cheat Sheet OWASP CSRF include alcuni motivi per cui potresti non voler utilizzare esclusivamente questo metodo. Tuttavia, se non affronti nessuna di queste restrizioni, personalmente ritengo che questo metodo possa essere utilizzato al posto di un metodo più complesso.

Inoltre, a seconda del supporto del browser, è disponibile l'opzione cookie "SameSite: strict". Ciò impedisce che i cookie vengano inviati da un sito di terze parti, mitigando anche CSRF.