Írjon a támogatásnak

E-mailben válaszolunk, általában két napon belül.

A Google reCAPTCHA visszaélés elleni védelemként ellenőrzi ezt a beküldést; ennek során adatok jutnak el a Google-hoz. A szkript csak az űrlap megnyitásakor töltődik be.

← Összes bejegyzés

Számlálás süti nélkül

Egy látogatószámlálónak van egy kényes feladata: meg kell tudnia különböztetni két látogatást. Ha erre nem képes, akkor egy ember, aki tízszer tölt újra egy oldalt, tíz embernek látszik, és a weboldalon látható szám puszta kitaláció.

A szokásos megoldás egy süti. Ez a weboldal nem használ ilyet. Az alábbiakban leírjuk, mit tesz helyette, és azt is, miért kellett megdolgozni azért, hogy ez a mondat valóban igaz legyen.

A süti, amelyet senki sem kért

Az idei évig minden, a számlálóhoz érkező kérés PHP-munkamenetet indított. Ez egyetlen kódsor, ártalmatlannak tűnik, és azt jelentette, hogy minden Stats4U-számlálót használó weboldal minden látogatója munkamenet-sütit kapott – mi állítottuk be, valaki más oldalán, anélkül, hogy ezt bármelyik fél szándékozta volna.

összetevőkIP · UA · IDdátum · napi salthash16 bájtmegőrzés2 napmagát a címet sehol sem rögzítjükha a salt eltűnt, senki sem tud egy napot újraszámolni — mi sem

A munkamenetet soha semmire nem használták. A bizonyítékot könnyű volt megtalálni, amint valaki utánanézett: abban a könyvtárban, ahol a munkamenetek tárolódnak, egyetlen fájl sem volt. Évek óta sütit állított be mások weboldalain olyan adatok tárolására, amelyeket soha senki nem írt és nem olvasott.

A számlálási útvonalról eltűnt. Munkamenet ma már csak akkor indul, ha valaki számlálót hoz létre vagy állít be újra – vagyis olyan műveletet végez, amelyet szándékosan, ezen a weboldalon hajt végre.

Mi lépett a helyébe

A látogatókat egy hash különbözteti meg egymástól. Öt dolog kerül bele:

  • az IP-cím
  • a böngészőazonosító (user agent)
  • a számlálóazonosító
  • a mai dátum
  • egy titkos érték, amely naponta változik

Az eredmény 16 bájt, és csak ezt tároljuk. Két napig őrizzük meg, aztán töröljük. Magát az IP-címet egyetlen ponton sem rögzítjük.

Ha ugyanaz a személy ugyanazon a napon kétszer keresi fel ugyanazt a számlálót, ugyanaz a 16 bájt keletkezik, így a rendszer a második látogatást ismétlésként ismeri fel. Másnap ugyanabból a személyből egészen más érték lesz, mert a dátum és a titkos érték is megváltozott. Ez az egész mechanizmus.

Miért változik a titkos érték

Ezt a részt könnyű elrontani, és itt is hibás volt egészen idén.

A régi változat egyetlen állandó titkos értéket használt. Ez is különböző hash-eket adott különböző emberekre, ami rendben lévőnek hangzik. Csakhogy ez azt jelentette, hogy aki birtokolta ezt a titkos értéket, az egy gyanított IP-cím hash-ét újra kiszámíthatta az archívum bármelyik napjára – és így a névtelen 16 bájtos értékek táblázatát visszaalakíthatta annak nyilvántartásává, ki mit látogatott meg, egészen addig visszamenőleg, ameddig az adatok visszanyúltak.

A titkos érték most naponta változik, a régieket pedig két nap után töröljük. Ezt követően a számítást többé senki sem tudja elvégezni. Ez arra is vonatkozik, aki ezt a weboldalt üzemelteti, és éppen ez a lényeg: az a védelem, amely az üzemeltető jó viselkedésén múlik, nem védelem, hanem ígéret.

A képernyőfelbontás, és egy tanulság a törlésről

A képernyőfelbontást korábban gyűjtöttük. Ez klasszikus ujjlenyomat-jel (fingerprinting), és nem érte meg, amibe került, ezért kivettük abból a szkriptből, amely a beágyazó oldalon fut.

Ez nem volt elég, és az okát érdemes ismernie mindenkinek, aki mások weboldalai számára készít valamit. A szkriptet hétnapos gyorsítótár-élettartammal szolgáljuk ki, így a régi példányok a változás után még egy hétig működtek a látogatók böngészőiben. Ennél is rosszabb, hogy egyes weboldalak egyáltalán nem hivatkoznak a szkriptre – évekkel ezelőtt bemásolták egy példányát a saját oldalaikba, és ez a példány örökké pontosan azt fogja csinálni, amit a bemásolás napján.

A felbontás tehát továbbra is érkezett. A megoldás az volt, hogy a szerver utasítsa el az értéket, függetlenül attól, ki küldi. Ha egy adatgyűjtést a kliensből távolítunk el, az csak az új klienseket állítja meg. Ha a szerverből, akkor azonnal megszűnik.

Ellenőrzés

Mindez puszta állításként nem sokat ér, ezért íme a parancs:

  • curl -sk -D - -o /dev/null 'https://www.stats4u.net/index.php?action=pic&s4uid=1' | grep -i set-cookie

Ha nincs kimenet, nem jött létre süti.

Egy záró figyelmeztetés, ugyanaz, mint mindig: ez azt írja le, mit csinál a szoftver. Hogy ez megfelel-e az adott országban érvényes szabályoknak, arra egy szakképzett személynek kell választ adnia, és ez a szöveg nem az a válasz.

Frissítés (2026. szeptember 11.): 2026. augusztus 27-től a szkript ismét kiolvasta a képernyőfelbontást, a böngészőablak szélességét és a pixelarányt minden weboldalon, amely beágyazta. 2026. szeptember 11. óta ezt csak ott teszi, ahol a weboldal tulajdonosa a következővel bekapcsolja: data-screen="1". Ennek az attribútumnak a hiányában a jelenlegi szkript a három érték egyikét sem olvassa ki, és a szerver a régebbi példányokból érkező értékeket sem tárolja többé.

Hirdetés