IPRO - PC Magazine Romania, Ianuarie 2004
SOLUȚII PENTRU PROGRAMATORII ȘI DESIGNERII WEB
Tehnologia JavaServlets - despre cookie-uri
Mircea Scărlătescu
O problemă o reprezintă de asemenea arhicunoscutul e-mail spam, adică mesaje
publicitare nedorite, care odată deschise setează tot felul de cookie-uri pe
sistem, care pot transmite informații către alte locații sau situri, ceea ce
duce la și mai mult spam.
Cuvântul cookie (traducere din limba engleză: prăjiturică) este unul care,
deși omniprezent în lucrările și tutorialele web, este un mare semn de întrebare
pentru mulți pasionați ai domeniului. Una dintre cele mai controversate metode
de identificare a utilizatorului web nu a fost ignorată nici de platforma Java,
tehnologia JSP-Servlets acordând o importanță deosebită pentru cookie-uri. Vom
încerca în cele ce urmează să vă aducem în atenție metodele de lucru precum
și o prezentare scurtă a ceea ce reprezintă cookie-urile, și la ce se folosesc.
Cookie-urile reprezintă seturi de date (în format text) care sunt trimise de
către serverul web către browserul client, și pe care același browser le retrimite
neschimbate către server la o apelare ulterioară. Prin această metodă de stocare
a datelor la client, siturile web pot să ofere servicii speciale pentru clienți
printre care putem să enumerăm următoarele:
- identificare a utilizatorilor pe situri care necesită acest lucru. Un exemplu
deja clasic este reprezentat de siturile de comerț electronic, care de multe
ori folosesc cookie-uri pentru a identifica automat vizitatorii, și a afișa
conținutul ofertelor funcție de alegerile anterioare făcute de către clienți.
Să spunem că un utilizator este interesat în mod special de articole de sport
atunci când intră într-un magazin virtual. Situl poate să detecteze acest
lucru și să stocheze un cookie ce va servi ca la urmatoarea vizitare, ofertele
cu echipament sportiv să fie afișate primele. Există de asemenea posibilitatea
de stocare a comenzilor făcute online de către vizitatori.
- eliminarea necesității logării cu username și parolă; marea majoritate
a siturilor din ziua de azi necesită un username și o parolă pentru a accesa
anumite secțiuni customizate. Cookie-urile oferă o metodă practică de a elimina
necesitatea introducerii repetate a parolei și a username-ului prin identificarea
automată a vizitatorului.
- publicitate mai bine direcționată; prin identificarea automată și prin
stocarea informațiilor despre preferințele utilizatorilor se pot realiza campanii
publicitare mult mai eficiente, în sensul că utilizatorul nostru de mai sus
care dorea produse sportive de la un magazin virtual poate vedea mai multe
bannere cu astfel de produse decât un pasionat al produselor electronice☺.
Această enumerare oferă câteva motive pentru ca acest sistem de monitorizare
și stocare de date să fie folosit. Multe sunt însă și opiniile contra acestor
´prăjiturele´. Din punctul de vedere al securității, problema stă
puțin diferit. Astfel, dimensiunile unui cookie nu pot depăși 4 Kb, iar browserele
în general nu acceptă mai mult de 20 de cookie-uri per sit, și 400 în total,
deci problema spațiului pe hdd-ul clientului nu intră în discuție, la fel și
atacurile posibile venite direct prin intermediul acestor cookie-uri, pentu
că ele nu pot stoca cod viral, ci doar informații. Până aici, toate bune și
frumoase ☺.
Problema păstrării caracterului privat al navigării pe Internet se pune însă
altfel în discuția noastră. Astfel, nu mulți utilizatori sunt încântați de ideea
că un motor de căutare să rețină ce căutări au efectuat în ultimele zile. La
fel, tipul și conținutul tematic al siturilor vizitate poate să fie reținut.
O problemă o reprezintă de asemenea arhicunoscutul e-mail spam, adică mesaje
publicitare nedorite, care odată deschise setează tot felul de cookie-uri pe
sistem, care pot transmite informații către alte locații sau situri, ceea ce
duce la și mai mult spam, și asta în caz fericit, în care datele colectate nu
sunt folosite și în alte scopuri, chiar ilegale.
Tot o problemă de acest gen poate să fie reprezentată de partajarea de informații
între situri, fără acordul utilizatorului. Astfel, dacă este să continuăm exemplul
cu motorul de căutare, atunci un motor de căutare poate să ofere acces la informațiile
stocate în cookie-uri la clienți, și astfel răspunsul la căutări poate să fie
modificat în funcție de ce situri accesează clientul, toate acestea reprezentând
o mare problemă din punctul de vedere al confindențialității datelor.
Dacă mai luăm încă un exemplu de mai sus, al autentificării fără username și
parolă, pot să apară probleme la stocarea informațiilor senzitive în cookie-uri,
cum ar fi serii ale cărților de credit, informații care pot să fie interceptate
de o altă aplicație.
O scurtă concluzie la prezentarea cookie-urilor aceasta ar putea fi că deși
extind serios funcționalitatea unor situri, nu trebuie să se conteze pe ele
în cadrul proiectării unuei pagini web. Funcționalitatea sistemului nu trebuie
să fie afectată de eliminarea cookie-urilor de pe sistemul client, și trebuie
să se țină cont și de faptul că de foarte multe ori utlizatorii web își dezactivează
opțiunea de a stoca informații sub forma cookie-urilor. Așadar, nu contați pe
prezența cookie-urilor la clienți!
Java Servlet Cookie API
Să vedem acum ce facilități pentru lucrul cu cookie-uri ne oferă platforma
Java.
Pentru a lucra cu un cookie trebuie respectate două etape: crearea unui obiect
de tip cookie, setarea unor atribute, despre care vom vorbi imediat, și apoi
atașarea acestui cookie la răspunsul trimis de către servlet. Prima parte, constă
în instanțierea clasei Cookie, prin constructorul cu doi parametri, unul reprezentând
denumirea cookie-ului, și al doilea ce conține informațiile dorite. Numele și
valoarea nu trebuie să conțină spații sau unul din caracterele [ ] ( ) = , "
/ ? @ : ; După cum am spus, se pot seta o serie de proprietăți ale obiectului,
înainte de a-l atașa la răspuns pentru trimitere la client. Prezentăm în cele
ce urmează o serie de astfel de proprietăți:
- getComment/setComment setează sau citește un comentariu
asociat la obiectul de tip cookie;
- getDomain/setDomain setează sau citește domeniul pentru
care cookie-ul se aplică. În mod normal, domeniul este identic cu cel care-l
trimite. Este o metodă folositoare atunci când se dorește redirectarea către
o altă mașină din același domeniu (spre exemplu, dacă acest cookie este unul
cu scop de setare targeting-ului publicității ce apare pe sit, atunci poate
să fie setat către un server specializat);
- getName/setName setează sau obține numele cookie-ului.
Ținând cont că metoda getCookies din HttpServletRequest returnează un obiect
de tip Array cu obiecte de tip Cookie, metoda getName ajută la identificarea
cookie-urilor după nume;
- getValue/setValue analog cu metoda de mai sus, setează
sau citește valoarea care este memorată în obiect;
- getSecure/setSecure setează sau obține o valoare booleană
care stabilește dacă cookie-ul va fi transmis doar pe sesiuni (conexiuni)
criptate (spre exemplu, de tip SSL).
Iată cum se realizează instanțierea unui obiect de tip Cookie, așa cum am spus
mai sus, cu ajutorul constructorului:
Cookie exemplu = new Cookie("PCMagazine", "Ianuarie 2004Continut");
Obiectul response este unul de tip HttpServletResponse
Iată acum și un exemplu de citire a valorilor unor cookie-uri citite de la
client:
response.addCookie(exemplu); public String getTheValue(Cookie[] cookies, String cookieName) { for(int i=0; i<cookies.length; i++) { Cookie cookie = cookies[i]; if (cookieName.equals(cookie.getName())) return(cookie.getValue()); } }
În acest exemplu, dintr-un vector de obiecte de tip cookie se citesc pe rând
numele acestor variabile, și în momentul identificării obiectului dorit, se
returnează valoarea, sub forma unui obiect de tip String .
După exemplele de mai sus, se poate preciza că lucrul cu cookie-uri este facil,
și se înscrie în direcția impusă de JavaServlets: simplificarea și mărirea productivității
dezvoltatorilor. Dar trebuie subliniat încă o dată că acest tip de stocare a
datelor și identificare a utilizatorilor este una care nu poate să fie luată
drept o garanție. Având în vedere că orice user își poate dezactiva cookie-urile
prin două-trei clickuri în browser, trebuie avută în vedere o variantă de rezervă,
iar mulți programatori spun că de fapt varianta de rezervă pentru identificare
este chiar cea bazată pe cookie-uri, prima variantă, accea de identificare prin
username și parolă. Publicitatea negativă care s-a înregistrat în legatură cu
cookie-urile, le fac un subiect de cele mai multe ori neplăcut pentru specialiștii
în securitate web, deși multe dintre poveștile horror´ despre securitatea
compromisă cu ajutorul cookie-uri nu sunt adevarate, sau măcar sunt povestite
în mod greșit.
În cele din urmă alegerea va aparține, iar flerul dumneavoastră ca dezvoltatori
trebuie să fie elementul determinant atât în optarea pentru folosirea sau nu
a cookie-urilor, cât și în modul de lucru cu acestea. Mult succes, și bug-uri
cât mai puține!
Pentru detalii despre tehnologia Servlets, inclusiv clasele legate de lucrul
cu sesiuni vă propunem două legături:
|