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:
|