Il carattere jolly Access-Control-Allow-Origin non consente l'invio di cookie di sessione

0

Ho sempre pensato che le restrizioni CORS dovessero disabilitare il seguente scenario:

Inserisco attacker.com, JS invia GET facebook.com, il mio browser aggiunge i miei cookie, attacker.com ha accesso al mio profilo / feed di Facebook.

MA

Sto tentando di inviare una richiesta GET dal mio link a MY link con javascript, perché voglio condividere alcune informazioni dell'utente nel mio negozio. shop.domain.com è shopify quindi non posso inserire alcun codice di backend in questo sottodominio.

Ho ricevuto questo errore:

Access to XMLHttpRequest at 'https://www.domain.com/api/accounts/me' from origin 'https://shop.domain.com' has been blocked by CORS policy: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

la mia API restituisce Access-Control-Allow-Origin: * e I ANCORA non può inviare credenziali. quindi qual è il caso d'uso per Access-Control-Allow-Origin: * ? Posso capire perché non funziona, ma cosa sono protetto da se questa intestazione non è presente.

Che cosa cambia questa intestazione?

anche i miei cookie sono a livello di dominio ma solo HTTP, quindi JS su shop.domain.com non può semplicemente estrarre il mio id di sessione.

    
posta EralpB 29.11.2018 - 15:26
fonte

1 risposta

1

Il caso d'uso di Access-Control-Allow-Origin: * è di consentire l'XHR di origine incrociata da qualsiasi dominio. Questo può essere utile per alcune API pubbliche.

Tuttavia, nel caso in cui un sito richieda a un utente di eseguire il primo login e quindi di mantenere l'utente autenticato tramite i cookie di sessione (o l'autenticazione di base), XHR all'interno di questa sessione (cioè con credenziali) di solito è previsto solo per lo stesso dominio o in alcuni casi sono di origine incrociata ma solo da domini selezionati. XHR di origine incrociata da domini arbitrari che include credenziali è molto probabilmente un errore di configurazione irreversibile. Per rendere impossibile il caso più ovvio di tale errata configurazione, la combinazione di Access-Control-Allow-Origin: * e withCredentials=true fallirà. Se desideri ricevere XHR con origine incrociata con credenziali, devi specificare in modo esplicito le origini a cui è consentito eseguire questo tipo di accesso sensibile invece di utilizzare solo un carattere jolly.

Vedi anche MDN: richiesta con credenziali .

    
risposta data 29.11.2018 - 17:05
fonte

Leggi altre domande sui tag