Kontaktovat podporu

Odpovíme e-mailem, obvykle do dvou dnů.

Google reCAPTCHA kontroluje toto odeslání kvůli ochraně před zneužitím; data se přitom předávají společnosti Google. Skript se načte až při otevření tohoto formuláře.

← Všechny články

Počítání bez souboru cookie

Počítadlo návštěv má jeden nešikovný úkol: musí od sebe rozlišit dvě návštěvy. Pokud to nedokáže, jeden člověk, který desetkrát znovu načte stránku, vypadá jako deset lidí a číslo na webu je fikce.

Obvyklým řešením je soubor cookie. Tento web ho nepoužívá. Zde je, co dělá místo toho, a proč si poctivá verze této věty vyžádala nějakou práci.

Soubor cookie, o který nikdo nežádal

Až do letošního roku každý požadavek na počítadlo spouštěl relaci PHP. Je to jeden řádek kódu, vypadá neškodně a znamenal, že každý návštěvník každého webu s počítadlem Stats4U dostal relační soubor cookie – nastavený námi, na cizí stránce, aniž by to kterákoli strana zamýšlela.

vstupyIP · UA · IDdatum · denní salthash16 bajtůuchování2 dnysamotná adresa se nikdy nezapisujekdyž salt zmizí, den už nikdo nepřepočítá — ani my

Relace se nikdy k ničemu nepoužila. Důkaz se snadno našel, jakmile se někdo podíval: adresář, kde se relace ukládají, obsahoval nula souborů. Léta nastavovala soubor cookie na cizích webech, aby uchovávala data, která se nikdy nezapsala ani nepřečetla.

Z cesty počítání zmizela. Relace se nyní spouští jen tehdy, když někdo vytváří nebo znovu nastavuje počítadlo – tedy při akci, kterou na tomto webu provedl záměrně.

Co ji nahradilo

Návštěvníci se rozlišují pomocí hashe. Vstupuje do něj pět věcí:

  • IP adresa
  • user agent
  • číslo počítadla
  • dnešní datum
  • tajný klíč, který se každý den mění

Výsledkem je 16 bajtů, a ty se ukládají. Uchovávají se dva dny a pak se smažou. Samotná IP adresa se nikdy v žádném okamžiku nezapisuje.

Dvě návštěvy téhož člověka ve stejný den u stejného počítadla dají stejných 16 bajtů, takže druhá se rozpozná jako opakovaná. Zítra tentýž člověk vytvoří něco úplně jiného, protože se změnilo datum i tajný klíč. To je celý mechanismus.

Proč se tajný klíč obměňuje

Tady je snadné udělat chybu, a až do letoška tu ta chyba byla.

Stará verze používala jeden trvalý tajný klíč. Ten sice stále dával různým lidem různé hashe, což zní dobře. Znamenalo to ale, že kdokoli s tímto klíčem mohl vzít podezřelou IP adresu a přepočítat její hash pro libovolný den v archivu – a proměnit tak tabulku anonymních 16bajtových hodnot zpět v záznam o tom, kdo co navštívil, až tak daleko do minulosti, kam data sahala.

Tajný klíč se nyní mění denně a staré klíče se po dvou dnech mažou. Jakmile se to stane, výpočet už nemůže provést nikdo. To zahrnuje i provozovatele tohoto webu, a o to jde: ochrana, která závisí na dobrém chování provozovatele, není ochrana, ale slib.

Rozlišení obrazovky a poučení o mazání

Dříve se shromažďovalo rozlišení obrazovky. Je to klasický signál pro fingerprinting a nestálo za to, co stálo, a tak bylo odstraněno ze skriptu, který běží na stránce s vloženým počítadlem.

To nestačilo, a důvod stojí za to znát každému, kdo staví věci pro cizí weby. Skript se doručuje s platností mezipaměti sedm dní, takže staré kopie zůstaly v prohlížečích návštěvníků aktivní ještě týden po změně. Horší je, že některé weby na skript vůbec neodkazují – před lety si jeho kopii vložily přímo do svých stránek a tato kopie bude navždy dělat přesně to, co dělala v den vložení.

Rozlišení tedy dál přicházelo. Řešením bylo, aby hodnotu odmítal server bez ohledu na to, kdo ji posílá. Odstranění sběru dat z klienta zastaví jen nové klienty. Odstranění ze serveru ho zastaví okamžitě.

Ověření

Nic z toho nemá velkou cenu jako pouhé tvrzení, takže tady je příkaz:

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

Žádný výstup znamená, že nebyl nastaven žádný soubor cookie.

Na závěr jedno upozornění, stejné jako vždy: toto popisuje, co software dělá. Zda splňuje pravidla platná v konkrétní zemi, je otázka pro někoho, kdo je k odpovědi kvalifikovaný, a tohle taková odpověď není.

Aktualizace, 11. září 2026: Od 27. srpna 2026 skript znovu četl rozlišení obrazovky, šířku okna prohlížeče a poměr pixelů, a to na každém webu, který ho vložil. Od 11. září 2026 to dělá jen tam, kde to majitel webu zapne pomocí data-screen="1". Bez tohoto atributu aktuální skript nečte žádný z těchto tří údajů a server je už neukládá ani ze starších kopií.

Reklama