In che modo CORS previene l'XSS?

40

Recentemente ho saputo di CORS e ho ottenuto impressione che il suo scopo è quello di prevenire l'XSS . Con CORS, il browser blocca le richieste a diversi domini, a meno che non siano presenti specifiche intestazioni .

Ma se una persona malintenzionata inietta un codice JavaScript in una pagina per rubare i cookie degli utenti e inviarli a un URL che controlla, tutto ciò che deve fare è aggiungere la seguente intestazione sul lato server per far funzionare la richiesta comunque :

Access-Control-Allow-Origin: *

Quindi, in che modo CORS previene l'XSS? O ho frainteso lo scopo di CORS, e semplicemente non ha nulla a che fare con XSS di per sé?

    
posta Gigi 23.12.2015 - 14:24
fonte

3 risposte

29

TL; DR: In che modo CORS previene l'XSS? Non è così. Non è pensato per farlo.

CORS ha lo scopo di consentire agli host di risorse (qualsiasi servizio che rende i propri dati disponibili via HTTP) di limitare quali siti web possono accedere a tali dati.

Esempio: stai ospitando un sito Web che mostra i dati sul traffico e stai utilizzando le richieste AJAX sul tuo sito web. Se SOP e CORS non erano presenti, qualsiasi altro sito Web potrebbe mostrare i tuoi dati sul traffico semplicemente tramite AJAX ai tuoi endpoint; chiunque potrebbe facilmente "rubare" i tuoi dati e quindi i tuoi utenti e i tuoi soldi.

In alcuni casi la condivisione dei dati ( C ross O rigin R esource S haring) è intesa , per esempio durante la visualizzazione di Mi piace e cose dall'API di Facebook sulla tua pagina web. Semplicemente rimuovendo SOP per realizzare questa è una cattiva idea a causa delle ragioni spiegate nel paragrafo precedente. Quindi è stato introdotto CORS.

CORS non è correlato a XSS perché qualsiasi utente malintenzionato che può inserire un pezzo di codice malvagio in un sito Web può anche configurare un server che invia intestazioni CORS corrette. CORS non può impedire a JavaScript malintenzionato di inviare ID di sessione e cookie di permlogin all'autore dell'attacco.

    
risposta data 23.12.2015 - 14:56
fonte
12

Cross-Site-Scripting (XSS) è l'esecuzione del codice di script definito da un aggressore nel contesto di un altro sito. CORS non impedisce XSS, infatti non è correlato a XSS.

Invece CORS offre un modo per indebolire le restrizioni esistenti sulle richieste Ajax (ad esempio XMLHTTPRequest) in un modo che, auspicabilmente, non introduce più problemi di sicurezza. Tradizionalmente, XMLHTTPRequest era limitato a comunicare all'interno della stessa origine, ovvero non era possibile inviare una richiesta ad un sito esterno. Questa restrizione è stata eseguita in modo che un utente malintenzionato non possa eseguire una richiesta cross-site e ottenere il risultato della richiesta, poiché ciò consentirebbe a un utente malintenzionato di leggere i dati dai siti in cui gli utenti sono stati registrati (poiché la sessione e altri cookie vengono inviati con richiesta a un sito).

Con CORS questa restrizione è parzialmente rimossa. È ora possibile inviare un XMLHTTPRequest a un altro sito ma il risultato può solo leggere all'interno dell'applicazione se il sito remoto ha aggiunto esplicitamente alcune intestazioni CORS che consentono l'accesso. Ma ancora, questo non è l'esecuzione di script sul sito remoto e quindi questo non è correlato a XSS.

    
risposta data 23.12.2015 - 14:48
fonte
1

Altre risposte sono corrette sul fatto che XSS e CORS non sono direttamente correlati (anche se CORS può aiutare a limitare l'impatto di XSS sul sito vulnerabile).

Fondamentalmente CORS consente al codice js del tuo sito Web di accedere al back-end del tuo sito web con i cookie e le credenziali immessi nel tuo browser mentre il tuo backend rimane protetto da js di altri siti, chiedendo al browser client di accedervi (con credenziali ottenute dall'utente).

Questo è quando Control-Allow-Credentials: true è impostato (che consente al browser di inviare cookie e l'autenticazione di base / gssapi / napi). Non sono ancora sicuro di come CORS aiuti senza questa opzione. Vedi la mia domanda " devo limitare l'origine in un'app per le API? "

    
risposta data 17.12.2017 - 15:59
fonte

Leggi altre domande sui tag