1. Introducere
Cookie , sau cookie HTTP, cookie web, cookie de browser este o mică bucată de date trimisă de pe site și stocată în browserul utilizatorului atunci când navighează pe acest site. De fiecare dată când un utilizator încarcă un site web, browserul va trimite automat cookie-uri către serverul web pentru a notifica site-ul web despre acțiunile anterioare ale utilizatorului.
Cookie-urile sunt concepute pentru a fi un mecanism de încredere care ajută site-urile web să-și amintească informații despre stare (cum ar fi articolele din coșul de cumpărături) sau să stocheze activitățile utilizatorilor (inclusiv clicuri). un link, autentificare, pagini vizitate în timpul săptămânii, lunii sau anului,... ).
Deși cookie-urile nu pot transporta viruși și nici nu pot instala malware pe computerul dvs., utilizarea cookie-urilor de urmărire și în special a cookie-urilor de la terți este considerată o modalitate de a identifica informațiile personale din istoricul de navigare al utilizatorilor. Cookie-urile pot salva parole sau conținut pe care utilizatorii le introduc în formulare html, cum ar fi numere de card de credit sau adrese personale.
Când un utilizator vizitează un site web pentru prima dată, un cookie este trimis de la serverul web către browser și stocat pe computerul său. Apoi, când se întoarce pe site, site-ul îl va recunoaște datorită informațiilor salvate în cookie.
Cookie-urile de autentificare sunt o metodă comună utilizată pentru a determina dacă un utilizator este conectat sau nu la un site web. Fără un astfel de mecanism, va fi dificil pentru site-ul web să știe când să trimită informații personale utilizatorului și să forțeze utilizatorul să se conecteze de mai multe ori. Cookie-urile de autentificare, deși foarte convenabile, creează oportunități pentru hackeri de a citi date sensibile din cookie-uri, efectuând astfel acțiuni care dăunează utilizatorilor.
2. Prezentare generală a cookie-urilor HTTP
2.1. Istorie
Termenul cookie este derivat din termenul cookie magic, care este o bucată de date neschimbată trimisă și primită de un program de calculator. Un programator pe nume Lou Montuli a venit cu ideea de a folosi cookie-uri magice în comunicațiile web în 1994. În acel moment, lucra pentru Netscape Communications, la un proiect de dezvoltare a aplicațiilor de comerț electronic pentru MCI. Cookie-urile au fost folosite ca soluție în construirea coșurilor de cumpărături virtuale, ajutând serverele MCI să nu fie nevoite să salveze starea tranzacțiilor, ci în schimb sunt stocate pe computerul utilizatorului.
Împreună cu John Giannandrea, Montuli a scris prima specificație pentru cookie-urile Netscape. Versiunea 0.0beta a Mosaic Netscape, lansată pe 13 octombrie 1994, a acceptat module cookie. Prima utilizare a cookie-urilor (în afara laboratorului) a verificat dacă un client care vizitează site-ul Netscape a mai vizitat sau nu. Montuli a primit un brevet pentru cookie-uri în 1995. Iar Internet Explorer versiunea 2 (lansată în octombrie 1995) a încorporat utilizarea cookie-urilor.
Introducerea cookie-urilor nu a fost larg răspândită în această perioadă. În special, cookie-urile sunt acceptate implicit, utilizatorii nu sunt anunțați despre prezența lor. Publicul a aflat despre cookie-uri doar după ce un articol despre acestea în Financial Times a fost publicat pe 12 februarie 1996. De atunci, cookie-urile au primit multă atenție, în special informațiile private conținute în ele. Cookie-urile au fost discutate în două audieri ale Comisiei Federale pentru Comerț din SUA în 1996 și 1997.
Prima discuție despre o specificație formală a cookie-urilor a început în aprilie 1995. Un grup special în cadrul Internet Engineering Task Force (IETF) a fost format în scopul realizării acestei lucrări. În cele din urmă, specificația a fost publicată de grup în februarie 1997. Specificația definea cookie-urile de la terți ca fiind fie neacceptabile pentru toți, fie cel puțin neactivate implicit.
În aprilie 2011, specificația standard pentru cookie-uri în utilizare practică a fost publicată în documentul RFC 6265 .
2.2. Terminologie
Cookie-uri de sesiune
Cookie-urile de sesiune, numite și cookie-uri în memorie sau cookie-uri tranzitorii, există doar în memoria temporară în timp ce utilizatorul navighează pe site. Dacă o dată de expirare sau un interval de valabilitate nu este setat în momentul creării cookie-ului, va fi setat un cookie de sesiune. În mod normal, browserele web vor șterge automat cookie-urile de sesiune când utilizatorul închide browserul.
Cookie-uri persistente
Cookie-urile persistente prelungesc sesiunea utilizatorului. Dacă un cookie persistent este setat la o vârstă maximă de 1 an, atunci în această perioadă, valoarea inițială setată în cookie va fi trimisă la server de fiecare dată când utilizatorul vizitează site-ul web. Poate fi folosit pentru a înregistra informații importante, cum ar fi modul în care utilizatorul a vizitat prima dată site-ul web. Din acest motiv, cookie-urile persistente sunt numite și cookie-uri de urmărire.
Cookie-uri securizate
Cookie-ul securizat este un atribut de securitate activat atunci când se utilizează HTTPS, asigurând că cookie-ul este întotdeauna criptat atunci când este transferat de la client la server, ajutându-l să evite interceptarea și dezvăluirea informațiilor. În plus, toate modulele cookie trebuie să respecte politica de aceeași origine a browserului.
Cookie-uri HttpOnly
Atributul HttpOnly al cookie-urilor este acceptat de majoritatea browserelor. Un cookie de sesiune HttpOnly va fi utilizat doar într-o singură solicitare HTTP (sau HTTPS), limitând astfel accesul API-urilor non-HTTP, cum ar fi Javascript. Această restricție atenuează, dar nu elimină furtul cookie-urilor prin vulnerabilitățile Cross-site scripting (XSS).
Cookie-uri de la terți
Cookie-urile primare sunt module cookie aparținând aceluiași domeniu (sau sub-domenii din același domeniu) afișate în bara de adrese a browserului. Cookie-urile de la terți sunt cookie-uri aparținând diferitelor domenii afișate în bara de adrese a browserului. Site-urile web pot avea conținut de pe domenii terțe (cum ar fi reclame banner), din care poate fi urmărit istoricul de navigare al utilizatorilor. Majoritatea setărilor de confidențialitate ale browserelor blochează cookie-urile de urmărire terță parte.
De exemplu, să presupunem că un utilizator vizitează site-ul web example1.com . Acest site web conține o reclamă de la ad.foxytracking.com. Când este încărcat, cookie-urile ad.foxytracking.com vor fi salvate. Apoi vizitează un alt site web (example2.com), care conține și un anunț de la ad.foxytracking.com și setează, de asemenea, un cookie aparținând ad.foxytracking.com. În cele din urmă, ambele cookie-uri vor fi trimise agentului de publicitate atunci când încarcă reclame sau accesează site-ul său web. Agenții de publicitate pot folosi aceste module cookie pentru a construi istoricul de navigare al unui utilizator pe toate site-urile web care conțin anunțurile acestora.
În 2014, existau câteva site-uri web care setau cookie-uri care puteau fi citite de mai mult de 100 de domenii terțe. În medie, un site web va avea setate aproximativ 10 cookie-uri, un număr maxim de cookie-uri fiind peste 800.
Supercookie
Un supercookie este un cookie care provine dintr-un domeniu de nivel superior, cum ar fi .com, sau un sufix public, cum ar fi .co.uk. Este important ca supercookie-urile să fie blocate de browsere din cauza unor probleme de securitate. Dacă este deblocat, un atacator care controlează un site web rău intenționat poate configura un supercookie pentru a uzurpa identitatea solicitărilor utilizatorilor, trimițând cereri către alte site-uri web care partajează același domeniu de nivel superior sau sufix public. De exemplu, un supercookie care provine din domeniul .com ar putea dăuna solicitărilor către example.com, chiar dacă cookie-ul nu provine de la example.com. Poate fi exploatat pentru a falsifica conectări sau pentru a schimba informațiile despre utilizator.
Fursecuri zombie
Cookie-urile zombie sunt cookie-uri care sunt recreate automat după ce utilizatorul le șterge. Acest lucru se realizează printr-un script care stochează conținutul cookie-ului într-o altă locație, cum ar fi un magazin de conținut Flash, un magazin HTML5 sau un alt mecanism la nivelul clientului.
2.3. Structura cookie-urilor
Un cookie cu o dimensiune de 4KB, include 7 componente principale:
- Nume
- Valoare
- Expiră (data de expirare)
- Cale (calea unde cookie-ul este valid, „/” înseamnă că cookie-ul este valid în orice cale)
- Domeniu
- Sigur
- Numai Http
Primele două componente (nume și valoare) sunt necesare.
2.4. Utilizare
Managementul sesiunii
Cookie-urile pot fi folosite pentru a menține datele referitoare la utilizatori în mai multe vizite pe site-ul web. Cookie-urile sunt o soluție pentru crearea unui coș de cumpărături, un coș de cumpărături virtual care îi ajută pe utilizatori să salveze articolele pe care le aleg în timp ce navighează printre produse.
Aplicațiile actuale pentru coșul de cumpărături stochează adesea lista de articole din coș în baza de date de pe partea serverului, în loc să o stocheze într-un cookie de pe partea client. Serverul web va trimite în mod normal un cookie care conține identificatorul de sesiune - ID-ul sesiunii (care este unic). Browserul web va returna acest ID de sesiune cu cererea de cumpărături a fiecărui utilizator.
Permiterea utilizatorilor să se conecteze la site-uri web este o altă aplicație a cookie-urilor. În mod normal, în timpul primei autentificări, serverul web va trimite clientului un cookie care conține ID-ul sesiunii. Utilizatorii își vor trimite informațiile, iar aplicația web va autentifica sesiunea, apoi va permite utilizatorului să utilizeze serviciile sale.
Cookie-urile oferă un mecanism rapid și convenabil de interacțiune client/server. Unul dintre avantajele cookie-urilor este că stochează informații despre utilizator într-un fișier aflat pe computerul utilizatorului. Acest lucru reduce semnificativ spațiul de stocare al serverului și timpul de procesare.
Personalizat
Cookie-urile pot fi folosite pentru a reține informațiile personale ale unui utilizator atunci când acesta vizitează un site web, pentru a afișa conținut mai relevant pentru acel utilizator de fiecare dată când acesta vizitează din nou site-ul web.
Un exemplu proeminent este funcția de recomandare de cărți de pe amazon.com. Când un utilizator face clic pe o carte, Amazon va face sugestii despre următoarele cărți pe care utilizatorul ar trebui să le verifice. Aceste sugestii se bazează pe cărțile pe care utilizatorii le-au răsfoit anterior și pe ce cărți au ales să cumpere.
Un alt exemplu este funcția de sugestii de căutare a Căutării Google. Când vă conectați cu contul personal și efectuați o căutare, Google vă va oferi sugestii „doar pentru dvs.”, iar rezultatele dorite apar întotdeauna în partea de sus a listei.
Monitorizați
Cookie-urile de urmărire pot fi folosite pentru a urmări istoricul de navigare al unui utilizator. Acest lucru se poate face și folosind adresa IP a computerului care trimite cererea către site-ul web sau bazându-se pe câmpul Referrer din antetul solicitării HTTP, dar cookie-urile oferă mai multă precizie. Acest lucru se face după cum urmează:
- Dacă un utilizator vizitează un site web, dar această solicitare nu conține un cookie, serverul va presupune că aceasta este prima dată când utilizatorul vizitează acest site web; Serverul va genera un șir aleator și îl va trimite ca cookie înapoi în browser împreună cu pagina web solicitată.
- Din acest moment, cookie-ul va fi trimis automat de browser către server de fiecare dată când este solicitată o nouă pagină web pe acest site web, serverul va returna pagina web solicitată în mod normal, dar cu URL-ul acelei pagini web și Accesul va fi salvat într-un fișier jurnal. Prin analizarea informațiilor salvate în acest fișier jurnal, vor fi dezvăluite istoricul de navigare al persoanei, site-urile web vizitate frecvent și obiceiurile de navigare.
2.5. Implementare

Cookie-urile sunt date trimise de la server la browser. Browserul îl va trimite apoi înapoi la server fără a modifica conținutul din interior, de fiecare dată când utilizatorul trimite o solicitare către site-ul web. Cookie-urile pot fi setate și printr-un limbaj de scripting, cum ar fi Javascript.
Fiecare browser web poate stoca cel puțin 300 de cookie-uri într-un fișier de 4 KB și cel puțin 20 de cookie-uri per server sau domeniu.
Configurați cookie-uri
Serverul web și browserul comunică între ele prin HTTP (HyperText Transfer Protocol). De exemplu, pentru a accesa pagina http://www.example.org/index.html, browserul se conectează la server trimițând o Solicitare HTTP astfel:
![Web11: cookie-uri HTTP și unele probleme de securitate Web11: cookie-uri HTTP și unele probleme de securitate]()
Serverul va răspunde trimițând browserului un pachet text simplu, numit răspuns HTTP. Acest pachet poate conține o linie care conține conținutul cookie-ului:
![Web11: cookie-uri HTTP și unele probleme de securitate Web11: cookie-uri HTTP și unele probleme de securitate]()
Set-Cookie este un câmp care indică browserului să stocheze cookie-ul și să îl trimită la server în viitor de fiecare dată când există o solicitare către server (dacă cookie-ul este încă expirat). De exemplu, browserul trimite o solicitare la http://www.example.org/spec.html trimițând o solicitare HTTP astfel:
![Web11: cookie-uri HTTP și unele probleme de securitate Web11: cookie-uri HTTP și unele probleme de securitate]()
Aceasta este o solicitare către o altă pagină care aparține aceluiași server. În acest caz, serverul va înțelege că această solicitare este legată de solicitarea anterioară, și răspunde prin trimiterea paginii web solicitate către browser, adăugând eventual și alte valori cookie.
Valoarea cookie-ului poate fi modificată de către server prin trimiterea câmpului Set-Cookie: name=value din HTTP Response către browser. Browserul va înlocui apoi vechea valoare cookie cu această nouă valoare.
Valoarea cookie-ului poate include orice caracter ASCII imprimabil, cu excepția „,”, „;” și spațiu alb. De asemenea, numele cookie-urilor nu pot conține caracterul „=”, deoarece acesta este caracterul care separă numele și valoarea.
Termenul crumb cookie este uneori folosit pentru a se referi la perechea nume-valoare a unui cookie.
Cookie-urile pot fi, de asemenea, setate prin Javascript sau un limbaj de scripting similar. În Javascript, obiectul document.cookie este folosit pentru a seta cookie-uri. Atributul HttpOnly este responsabil pentru prevenirea scripturilor proaste să citească conținutul cookie-urilor.
Proprietăți cookie
Pe lângă perechea nume-valoare, serverul poate seta și o serie de alte proprietăți cookie: Domain, Path, Expirse, Max-Age, Secure și HttpOnly. Browserul nu va trimite aceste atribute serverului, va trimite doar perechea nume-valoare. Aceste atribute sunt folosite de browser pentru a determina când să șterge cookie-urile, să blocheze cookie-urile sau să trimită cookie-uri către server.
Domeniu și cale
Domeniul și calea determină domeniul cookie-ului. Acestea permit browserului să determine când să trimită cookie-uri către server. Dacă nu sunt specificate, acestea sunt implicite pentru domeniul și calea obiectului solicitat. Cu toate acestea, există o diferență între un set de cookie-uri pentru foo.com fără atributul de domeniu și un set de cookie-uri cu atributul de domeniu foo.com. În primul caz, cookie-ul va fi trimis numai atunci când există o solicitare către foo.com. În acest din urmă caz, cookie-ul va fi trimis către toate subdomeniile foo.com. Următorul este un exemplu de directivă Set-Cookie de pe un site web după ce utilizatorul se conectează, dintr-o solicitare către docs.foo.com:
![Web11: cookie-uri HTTP și unele probleme de securitate Web11: cookie-uri HTTP și unele probleme de securitate]()
Primul LSID cookie nu are un atribut de domeniu și are calea /conturi. Browserul va trimite cookie-uri numai atunci când pagina solicitată este conținută în docs.foo.com/accounts. Celelalte două cookie-uri, HSID și SSID, sunt trimise înapoi la server dacă există o solicitare către orice subdomeniu al foo.com.
De asemenea, cookie-urile pot fi setate numai pentru domeniul superior și subdomeniile acestuia. Setarea cookie-urilor pe www.foo.com de pe www.bar.com nu va fi permisă din motive de securitate.
Expiră și vârsta maximă
Atributul Expires spune browserului când să ștergă cookie-ul. Data din Expires arată astfel: „Wdy, DD Mon YYYY HH:MM:SS GMT”. Max-Age este, de asemenea, utilizat pentru a indica data de expirare a unui cookie. Să luăm în considerare următorul exemplu:
![Web11: cookie-uri HTTP și unele probleme de securitate Web11: cookie-uri HTTP și unele probleme de securitate]()
Primul cookie este setat să expire pe 15 ianuarie 2013, acesta va fi folosit de browser atunci când acesta expiră. Al doilea cookie made_write_conn nu expiră și este folosit ca cookie de sesiune, acesta va fi șters când browserul este oprit. Al treilea cookie reg_fb_gate, are o dată de expirare în trecut, va fi șters imediat.
Securizat și numai Http
Proprietățile Secure și HttpOnly sunt nule; în schimb, prezența lor indică faptul că bazele Secure și HttpOnly sunt aplicate.
Atributul Secure păstrează transmisia cookie-urilor într-o conexiune criptată. Dacă serverul web setează un cookie cu atributul securizat dintr-o conexiune nesecurizată, cookie-ul poate fi totuși interceptat de un atac man-in-the-middle.
Atributul HttpOnly instruiește browserul să nu expună module cookie printr-o altă conexiune decât HTTP (sau HTTPS), cum ar fi Javascript și, prin urmare, îngreunează obținerea cookie-urilor prin exploatarea vulnerabilităților Cross-Site Scripting (XSS). .
3. Unele probleme de securitate la utilizarea cookie-urilor
Dacă un site web folosește ID-ul de sesiune pentru a identifica sesiunea unui utilizator, un atacator ar putea fura cookie-ul pentru a uzurpa identitatea utilizatorului. Iată câteva scenarii comune de furt de cookie-uri:
Ascultarea cu urechea
![Web11: cookie-uri HTTP și unele probleme de securitate Web11: cookie-uri HTTP și unele probleme de securitate]()
Traficul dintr-o rețea poate fi interceptat și citit de un terț (altul decât destinatarul și expeditorul). Acest trafic include cookie-uri. Dacă transmisia nu este criptată, un atacator poate citi informațiile sensibile conținute în cookie. Și profitând de aceste informații, atacatorii își vor uzurpa identitatea utilizatorilor pentru a efectua acțiuni periculoase, cum ar fi tranzacții bancare.
Această problemă poate fi rezolvată prin utilizarea unui protocol securizat între computerul utilizatorului și server - protocolul HTTPS. Serverul poate folosi indicatorul Securizat atunci când setează cookie-uri. Cookie-ul va fi trimis apoi numai printr-un canal criptat, cum ar fi o conexiune SSL.
Scripturi între site-uri
![Web11: cookie-uri HTTP și unele probleme de securitate Web11: cookie-uri HTTP și unele probleme de securitate]()
Limbajele de scripting, cum ar fi Javascript, au voie să citească valorile cookie-urilor și să le trimită către servere arbitrare.
Să presupunem că un site web are o eroare de scriptare între site-uri, hackerii pot introduce cod rău intenționat, cum ar fi următorul:
![Web11: cookie-uri HTTP și unele probleme de securitate Web11: cookie-uri HTTP și unele probleme de securitate]()
Când victima face clic pe linkul de mai sus, browserul va executa scriptul în atributul onclick: trimiterea cookie-ului victimei către serverul attacker.com.
Cross-site scripting este una dintre vulnerabilitățile comune ale site-urilor web (clasat pe locul al treilea în top 10 cele mai comune vulnerabilități în 2013 - conform OWASP).
Riscul acestei vulnerabilități poate fi limitat prin setarea semnalizatorului HttpOnly pentru cookie-uri. În acel moment, cookie-urile nu vor fi accesate prin limbaje de scripting.
Cerere de fals încrucișată
CSRF (Cross-site request forgery) sau atacul cu un singur clic, este o metodă de exploatare a vulnerabilităților site-ului web prin care comenzile neautorizate sunt executate de către victime - utilizatori care sunt autorizați de site fără știrea lor. .
CSRF va păcăli browserul victimei să trimită solicitări http către aplicațiile web. In cazul in care sedinta victimei nu a expirat, cererile de mai sus se vor face cu drepturile de autentificare ale victimei.
De exemplu, victima Bob efectuează tranzacții pe site-ul web al unei anumite bănci X. Fred este atacatorul, acest tip știe cum funcționează site-ul web al băncii X atunci când vrea să transfere bani din contul A în contul B, după cum urmează:
http://bank.example.com/withdraw?account=accountA&amount=100&for=accountB
Îi va trimite lui Bob un mesaj rău intenționat.
Dacă banca X stochează informații de autentificare a utilizatorului într-un cookie și Bob dă clic pe linkul de mai sus, banii lui Bob vor fi transferați lui Fred.
Pentru a limita acest risc, se pot seta parametrii Expires pentru cookie-uri.
4. Concluzie
Cookie-urile sunt folosite astăzi în majoritatea aplicațiilor web. Conține și riscuri potențiale, care afectează semnificativ utilizatorii. Prin urmare, din partea dezvoltatorului, trebuie să înțelegem clar cookie-urile și să știm să setăm parametrii necesari, astfel încât aplicația să fie mai sigură împotriva atacurilor hackerilor.