Teoricamente, hai ragione: il web avrebbe potuto essere progettato in modo tale che i browser potessero rilevare e prevenire questi attacchi. Tuttavia, non è stato progettato in questo modo e non esiste una soluzione semplice che possa essere applicata da un browser che non interrompa un numero elevato di siti Web esistenti.
One simplest example: By default, disallow cross-site requests at all?
Una "richiesta cross-site", nel contesto di CSRF, potrebbe essere semplice come "un tag <img>
che fa riferimento a un'immagine ospitata su un altro dominio". Prevenire tali richieste interromperebbe così tanti siti Web che il browser sarebbe semplicemente considerato interrotto da tutti i suoi utenti.
It is the browser which must stop making unauthorized requests.
La richiesta è solo "non autorizzata" nel senso che un particolare utente non lo ha richiesto. Questo, a prima vista, è un approccio più promettente: consenti la richiesta, ma non lasciare che sia autenticato come l'azione di un particolare utente.
Il problema qui è che la stragrande maggioranza delle autenticazioni utilizzate dalle applicazioni web non è in realtà visibile per il browser come autentica; al massimo, il browser sa che il server ha richiesto che una o più stringhe opache ("cookie") vengano restituite alla successiva richiesta.
Quindi, i browser dovrebbero interrompere l'invio di tutti i cookie nelle richieste che sono "cross-site", nel senso di CSRF - quando si richiedono immagini e altre risorse da utilizzare in una pagina HTML servita da un dominio diverso; quando si inviano moduli rivolti a un dominio diverso; ecc.
why should different domains (this should mean: different parties) want to talk to themselves through the user?
Un caso di utilizzo ovvio sono i sistemi di tracciamento utilizzati dai servizi di analisi e pubblicità - potresti dire che staremmo meglio se i browser li violassero, ma dal momento che il browser più popolare al mondo è sviluppato da un'azienda che fa gran parte delle sue entrate da tali servizi, questo è improbabile che accada.
A volte, la comunicazione tra i servizi nel browser aumenta effettivamente la privacy dell'utente - se l'unica comunicazione che può avvenire è sul server, entrambi i server devono conoscere e discutere l'identità dell'utente.
Se il web si fosse evoluto pensando a queste considerazioni sulla sicurezza, gli usi sicuri del comportamento simile a CSRF sarebbero stati implementati con altri mezzi; ma anche se vengono inventati nuovi protocolli e API, è molto difficile cambiare il comportamento predefinito dei browser senza rompere una grande quantità di contenuto esistente.
Pertanto, le funzionalità per proteggerle, comunque standardizzate, saranno sempre opt-in , quindi richiede un po 'di lavoro dallo sviluppatore dell'applicazione, per dire "Non sto facendo affidamento sulla funzionalità X , quindi disabilitalo in modo che non possa essere abusato ". Cose come le intestazioni di Content Security Policy e le opzioni di cookie HttpOnly e SameSite sono tali opt-in. Cose come i token CSRF nelle forme sono modi per non fare affidamento sull'utente per avere un browser aggiornato che implementa tutte le protezioni necessarie.