Loendamine ilma küpsiseta
Sisust ja selle ülevaatamisest
Selles artiklis
Külastajate loenduril on üks kohmakas ülesanne: ta peab eristama kaht külastust. Kui ta seda ei suuda, näeb üks inimene, kes lehte kümme korda uuesti laeb, välja nagu kümme inimest ning saidil olev number on väljamõeldis.
Tavapärane lahendus on küpsis. See sait seda ei kasuta. Siin on kirjas, mida selle asemel tehakse, ja miks selle lause ausa versiooni teenimine nõudis tööd.
Küpsis, mida keegi ei tahtnud
Kuni selle aastani käivitas iga loenduripäring PHP sessiooni. See on üks koodirida, see näib kahjutu ja see tähendas, et iga külastaja igal saidil, mis kasutas Stats4U loendurit, sai sessiooniküpsise – meie seatud, kellegi teise lehel, ilma et kumbki pool seda oleks tahtnud.
Sessiooni ei kasutatud kunagi millekski. Tõestust oli lihtne leida, kui keegi vaatas: kataloog, kus sessioone hoitakse, sisaldas null faili. See oli aastaid seadnud küpsist teiste inimeste veebisaitidele, et hoida andmeid, mida kunagi ei kirjutatud ega loetud.
See on loendamisteelt kadunud. Sessioon käivitatakse nüüd ainult siis, kui keegi loob loenduri või muudab selle seadeid – tegevus, mille nad tegid teadlikult, siin saidil.
Mis selle asendas
Külastajaid eristatakse räsi järgi. Sisse läheb viis asja:
- IP-aadress
- kasutajaagent (user agent)
- loenduri ID
- tänane kuupäev
- salajane väärtus, mis muutub iga päev
Välja tuleb 16 baiti, mida salvestatakse. Seda hoitakse kaks päeva ja seejärel kustutatakse. IP-aadressi ennast ei kirjutata üles üheski etapis.
Kaks sama inimese külastust samal päeval samasse loendurisse annavad samad 16 baiti, nii et teine tuvastatakse kordusena. Homme annab sama inimene täiesti teistsuguse väärtuse, sest nii kuupäev kui ka salajane väärtus on muutunud. See ongi kogu mehhanism.
Miks salajane väärtus muutub
See on osa, kus on kerge eksida, ja siin oli see kuni selle aastani vale.
Vana versioon kasutas ühte püsivat salajast väärtust. See andis ikkagi eri inimestele eri räsid, mis kõlab hästi. Kuid see tähendas, et igaüks, kes seda salajast väärtust valdas, sai võtta kahtlustatava IP-aadressi ja arvutada selle räsi uuesti arhiivi mis tahes päeva jaoks – muutes anonüümsete 16-baidiste väärtuste tabeli tagasi kirjeks, kes mida külastas, nii kaugele tagasi, kui andmed ulatusid.
Salajane väärtus muutub nüüd iga päev ja vanad kustutatakse kahe päeva pärast. Kui see on juhtunud, ei saa arvutust enam keegi teha. See hõlmab ka seda, kes saiti haldab, ja just see ongi mõte: kaitse, mis sõltub operaatori heast käitumisest, pole kaitse, vaid lubadus.
Ekraani eraldusvõime ja õppetund kustutamisest
Ekraani eraldusvõimet koguti varem. See on klassikaline sõrmejälje signaal ja see ei olnud oma hinda väärt, seega eemaldati see manustaval lehel töötavast skriptist.
See ei olnud piisav ja põhjus on väärt teadmist igaühele, kes ehitab asju teiste inimeste veebisaitidele. Skripti serveeritakse seitsmepäevase vahemälu elueaga, nii et vanad koopiad jäid külastajate brauserites pärast muudatust nädalaks elama. Hullem, mõned saidid ei lingi skriptile üldse – nad kleepisid selle koopia aastate eest oma lehtedele ja see koopia teeb igavesti täpselt seda, mida ta tegi kleepimise päeval.
Nii et eraldusvõime jätkas saabumist. Lahendus oli panna server väärtust tagasi lükkama, olenemata sellest, kes selle saadab. Andmekogumise eemaldamine kliendist peatab ainult uued kliendid. Selle eemaldamine serverist peatab selle kohe.
Kontrollimine
Sellel kõigel on vähe väärtust väitena, nii et siin on käsk:
- curl -sk -D - -o /dev/null 'https://www.stats4u.net/index.php?action=pic&s4uid=1' | grep -i set-cookie
Väljundi puudumine tähendab, et küpsist ei seatud.
Üks lõpetav hoiatus, sama mis alati: see kirjeldab, mida tarkvara teeb. Kas see vastab konkreetses riigis kehtivatele reeglitele, on küsimus, millele peab vastama selleks pädev isik, ja see ei ole see vastus.
Uuendus, 11. september 2026: Alates 27. augustist 2026 luges skript jälle ekraani eraldusvõimet, brauseriakna laiust ja pikslisuhet, igal saidil, mis seda manustas. Alates 11. septembrist 2026 teeb ta seda ainult seal, kus saidi omanik selle sisse lülitab atribuudiga data-screen="1". Ilma selle atribuudita ei loe praegune skript ühtegi kolmest ning server ei salvesta neid enam ka vanadest koopiatest.