If we trust browsers that they satisfy Same Origin Policy without bugs, would we still need CSRF-tokens?
Sì, lo faremo. A causa del fatto che ci sono altre richieste che non rientrano in SOP come il modulo submit, loading scripts..etc
Assuming server doesn't have CORS enabled: As far as I know we are not allowed to do POST requests cross-origin, then why is there a CSRF token?
Anche quando CORS è disabilitato, il browser completerà le richieste POST XHR, l'utente malintenzionato non sarà in grado di accedere alla risposta, ma la richiesta verrà completata e a lui sarà eseguito con successo l'attacco CSRF.
Questo, tuttavia, fallirà in caso di PUT
, PATCH
e DELETE
richieste poiché il browser prima emetterà una richiesta di OPTIONS
all'endpoint della richiesta per verificare la richiesta.
If server has CORS enabled: (assuming both GET and POST, because I don't see the point of CORSing POST but not GET)
We could GET the page, read the token and POST a correct request.
Questa sarebbe una vulnerabilità con il server stesso. CORS non dovrebbe essere aperto a tutti gli host remoti, solo quelli che possiedi (fiducia).