Visi seniai žino, kas yra cookiai. Jie leidžia atpažinti pakartotinai į tinklapį užėjusį lankytoją. Norėdamas ištrinti tinklapio išsaugotą informaciją pas save kompiuteryje pratrini naršyklės cookius, ir tinklapis nebegali tavęs atpažinti. Taip? O kas, jeigu pasakysiu, jog ne?

Kam tie cookiai?

Cookiai – tai paprasta tekstinė informacija, kurią naršyklė gali išsaugoti kompiuteryje, tinklapiui pareikalavus. Išsaugojus tokią informaciją ji pakartotinai siunčiama į web serverį kartu su kiekviena naršyklės užklausa. Taip tinklapis gali atpažinti, jog grįžai būtent tu ir atlikti tam tikrus veiksmus, pavyzdžiui prijungti tave prie sistemos nereikalaujant pakartotinai vesti prisijungimo duomenų. Patogu. Daugumoje atveju tas suteikia tikrai daug patogumo, juk taip gali “atskirai” bendrauti su kiekvienu lankytoju, identifikuojant jį pagal sesijos raktą, išsaugotą “sausainėliuose” (keistokas žodis, todėl norisi jį rašyti kabutėse).

Tačiau yra ir kita medalio pusė – saugumo ir privatumo problemos. Pašalinis žmogus prisėdęs prie kompiuterio arba kokiu nors būdu gavęs cookį, išsaugota tavo kompiuteryje (kas iš tikro nėra taip sudėtinga), gali būti identifikuojamas kaip tu, pasinaudojant tuo cookiu. Yra daug ginčų, kiek galima pasitikėti cookiais, todėl ir daug technikų, kaip įsitikinti, jog cookis validus. Žmogus, pravalęs visus naršyklės cookius turėtų nustoti būti identifikuojamas tinklapio. Tačiau tai ne visada yra taip. Egzistuoja ne vienas būdas kaip galima išsaugoti “sausanėlius” taip, kad jų “pravalymas” naršyklėje iš tikrųjų nieko ir nepravalytų.

Flash-cookiai

Problema tame, kad apart visų mūsų gerai pažįstamų “naršyklinių cookių” šiais laikais aktyviai naudojami alternatyvūs būdai, kaip susekti ir atpažinti vartotoją. Vienas iš jų – flash-cookiai. Taip taip, flash’as turi savo atskirą saugyklą cookiams. Ką tai reiškia? Kad cookiai gali gyventi ir vartotojas gali būti atpažintas net tada, kai į tinklapį užeinama su kita naršykle, negu kad kurioje buvo išsaugoti “sausainėliai”. Taigi praktiškai flash-cookiai patampa labai geru būdu sekti vartotoją.

Cookiai kešuojamuose paveikslėliuose

Tačiau jeigu patyrę web kūrėjai ir naudotojai girdėjo apie flash-cookius ir galbūt net juos kažkada valydavo, egzistuoja dar gudresni ir efektyvus būdai saugoti “cookius”, apie kuriuos, tikėtina, girdėjo tik labai mažas ratas žmonių. Pavyzdžiui, labai įdomus būdas – saugoti informaciją apie sesiją paveikslėliuose. Metodas atrodo maždaug taip: tinklapis kreipiasi į skriptą, kuris pagal esamus cookius sugeneruoja paveikslėlį, kuriame kiekvieno paveikslėlio taško RGB reikšmė nustatoma atitinkamai užkodavus “sausanėlių” informaciją. Naršyklei pasakoma, kad šį failą kešuotų labai smarkiai (sakykime, 10-ies metų periodui). Kai naršyklė sekantį kartą užkrauna puslapį ir kreipiasi į tą patį skriptą, jai grąžinamas “304 Not Modified” header’is, taigi naršyklė užkrauna jau failų sistemoje esantį paveikslėlį. Vėliau, norint išgauti paveikslėlyje užkoduotą informaciją iš JavaScript pusės, jis gali būti užkraunamas į Canvas elementą ir iteruojant per pikselius iš RGB reikšmių atgal atkoduojamas visas “sausanėlio” turinys. Skamba fantastiškai, ne? :)

“Sausanėliai” per naršyklės istorija

Šitas triukas naudoja naršyklės istoriją. Cookio informacija užkoduojama kokiu nors paprastu algoritmu, kuris ją atvaizduoja paprastais ASCII simboliais – pavyzdžiui Base64. Tarkime, užkoduota eilutė gavosi “abcdef”. Tada naršyklė fone padaro tokias užklausas:

http://tinklapis.com/cookie/a
http://tinklapis.com/cookie/ab 
http://tinklapis.com/cookie/abc 
http://tinklapis.com/cookie/abcd 
http://tinklapis.com/cookie/abcde 
http://tinklapis.com/cookie/abcdef 
http://tinklapis.com/cookie/abcdef-

ir tokiu būdu šitie adresai pasilieka naršyklės istorijoje. Vėliau naudojama technika, kuri vadinasi “CSS History Knocker” (plačiau – http://samy.pl/csshack), kuri JS ir CSS pagalba leidžia sužinoti, ar adresas buvo aplankytas anksčiau. Per sekantį užėjimą skriptas turėtų aplankyti ir patikrinti visus įmanomus http://www.tinklapis.com/cookie/* variantus, pradedant su “a” ir pridedant po vieną simbolį. Taip vyksta, kol nepasiekiamas simbolis “-” (auksčiau parodytu atveju), reiškiantis eilutės pabaigą. Galiausiai gaunasi toks savotiškas brute-force’inimas. Tačiau iš tikrųjų jokios užklausos į svetainę nėra siunčiamos – visos sąlygos tikrinamos lokaliai per naršyklės istoriją, dėl to užtrunka labai mažą laiko tarpą. Gautas Base64 kodas dekoduojamas ir gaunamas atstatytas “sausainėlis”.

Evercookie

Ir tai toli gražu ne visas tokių technikų sąrašas. Taip ir norisi išbandyti visą tai praktiškai. Vuolia – http://samy.pl/evercookie. Žmogus pasistengė ir surinko visas šias ir + kitas technikas į vieną biblioteką. Tinklapyje galima pasibandyti nustatyti “sausanėlį” su atsitiktinai sugeneruotu skaičiumi, o vėliau jį išgauti per kitus apsilankymus. O kas gi bus, jeigu vartotojas pravalys cookius savo naršyklėje? Įdomu tas, kad jeigu liko bent vienas šaltinis, kuriame cookis liko neištrintas, jis bus automatiškai atstatytas ir visuose kituose šaltiniuose (iš viso jų dabar naudojama 10 (!) ir žadama pridėti dar kelis). Tad vartotojui reikėtų stipriai pasistengti, kad galutinai ištrintų tokį cookį. Truputį nekažką jausmas?

Šaltiniai: