2010-07-29 14 views
6

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

5

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!)

+0

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'. –

+0

@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

+0

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

3

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 <-&lt;). Ma non farlo dal lato del cliente, poiché questa tecnica di prevenzione può essere facilmente aggirata; testare (e modificare) input dannosi sul lato server.

3

È 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.

+0

Ho verificato che il cookie è presente ma JavaScript non è in grado di leggerlo. – roger

Problemi correlati