Dire che c'è un sito foo.com
che carica JavaScript dal sito bar.com
. Ora, supponiamo che il codice JavaScript del sito bar.com
tenti di leggere i cookie utilizzando document.cookies
. Ho avuto l'impressione che utilizzando JavaScript, puoi leggere tutti i cookie impostati nel browser indipendentemente dalla loro origine. Ma si scopre che il codice JavaScript del sito bar.com
può accedere solo ai cookie impostati da bar.com
e non a nessun altro. Se questo è il caso, come vengono eseguiti gli attacchi di script injection che rubano i cookie?JavaScript e cookie di terze parti
risposta
Ma si scopre che il JavaScript dal sito bar.com può accedere solo ai cookie impostati da bar.com e non altri.
Questo non è vero. Ciò che importa è dove il documento HTML che contiene l'elemento <script>
è, non l'URL del file JS che dice <script>
menziona nell'attributo src.
Ho il sospetto che il tuo problema è che si sta accedendo document.cookies
quando la proprietà viene chiamata document.cookie
(Singolare!)
Caricare gli script all'interno della pagina attaccata.
Ad esempio, quando i commenti in un sistema di blog vengono compromessi, contengono un elemento script
che viene eseguito quando viene eseguito il rendering della pagina. Questo script può ottenere i cookie e inviarlo al server dell'attacker.
Ecco perché si dovrebbe mai input dell'utente fiducia e impedire che almeno alcuni tag nei commenti (o tradurre ogni <
-<
). Ma non farlo dal lato del cliente, poiché questa tecnica di prevenzione può essere facilmente aggirata; testare (e modificare) input dannosi sul lato server.
È possibile solo i cookie di accesso che sono stati impostati per il nome di dominio. Dal Wikipedia article on cookies:
Accanto alla coppia nome/valore, un cookie può contenere anche una data di scadenza, un percorso , un nome di dominio, e se il cookie è previsto solo per criptati connessioni. RFC 2965 invia i cookie hanno un numero di versione, ma questo è di solito omesso. Questi dati seguono la coppia name = newvalue e sono separati da punti e virgola. Ad esempio, un server può essere creato dal server inviando una riga Set-Cookie: nome = nuovo valore; scade = data; percorso = /; dominio = .esempio.org.
Il dominio e il percorso dire al browser che il cookie deve essere inviato al server quando richiedono URL di un dato dominio e percorso. Se non specificato, impostano automaticamente nel dominio e nel percorso dell'oggetto richiesto. Di conseguenza, il dominio e le stringhe di percorso possono comunicare al browser di inviare il cookie quando lo stesso non lo è. .Per motivi di sicurezza , il cookie è accettato solo se il server è un membro del dominio specificato dalla stringa di dominio.
Se foo.com
inviato un cookie che aveva il nome di dominio del bar.com
, o anche .com
, allora il codice javascript bar.com
in grado di leggere il cookie. Tuttavia, la maggior parte dei browser è configurata per accettare solo i cookie quando il nome del dominio corrisponde e rifiuta tale cookie.
Ho verificato che il cookie è presente ma JavaScript non è in grado di leggerlo. – roger
Questo è anche il modo in cui funzionano i CDN, come lo script jQuery caricato su questo sito: 'http: // ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js' non vivere sul dominio 'stackoverflow.com'. –
@David, la cosa dei cookie era un errore di ortografia durante la digitazione della domanda. Ho appena provato con alert (document.cookie) e ottengo solo una stringa vuota nonostante i cookie siano impostati. Sono piuttosto sconcertato. – roger
Ho eseguito un test. Il dominio non fa differenza. Forse i cookie che stai cercando di recuperare si trovano su un percorso diverso o sono impostati per essere solo HTTP. – Quentin