Comprendo lo scopo del Access-Control-Allow-Credentials
intestazione , ma non riesce a vedere quale problema risolve l'intestazione Access-Control-Allow-Origin
.
Più precisamente, è facile vedere come, se le richieste AJAX tra domini con credenziali fossero consentite per impostazione predefinita, o se alcuni server emettessero Access-Control-Allow-Credentials
di intestazioni su ogni richiesta, gli attacchi CSRF sarebbero essere reso possibile che non potrebbe altrimenti essere eseguito. Il metodo di attacco in questo scenario sarebbe semplice:
- Attira un utente ignaro verso la mia pagina dannosa.
- JavaScript sulla mia pagina dannosa invia una richiesta AJAX - con cookie - a qualche pagina di un sito di destinazione.
- JavaScript sulla mia pagina dannosa analizza la risposta alla richiesta AJAX ed estrae il token CSRF da esso.
- JavaScript sulla mia pagina dannosa utilizza qualsiasi mezzo - AJAX o una nave tradizionale per una richiesta CSRF, come un modulo POST - per eseguire azioni utilizzando la combinazione dei cookie dell'utente e del loro token CSRF rubato.
Tuttavia, ciò che non posso vedere è quale scopo viene offerto non consentendo le richieste AJAX tra domini non registrate senza un'intestazione Access-Control-Allow-Origin
. Supponiamo che dovessi creare un browser che si comportava come se ogni risposta HTTP che avesse mai ricevuto contenesse
Access-Control-Allow-Origin: *
ma ha comunque richiesto un'appropriata intestazione Access-Control-Allow-Credentials
prima di inviare cookie con richieste AJAX tra domini.
Poiché i token CSRF devono essere legati ai singoli utenti (ad esempio ai singoli cookie di sessione), la risposta a una richiesta AJAX noncredentialed non espone alcun token CSRF. Quindi quale metodo di attacco - se esiste - l'ipotetico browser descritto sopra esporrà i suoi utenti a?