Звернутися до підтримки

Відповідаємо електронною поштою, зазвичай протягом двох днів.

Google reCAPTCHA перевіряє це звернення на зловживання; дані передаються до Google. Скрипт завантажується лише під час відкриття цієї форми.

← Усі записи

Підрахунок без cookie-файлу

У лічильника відвідувань є одне незручне завдання: він повинен відрізняти один візит від іншого. Якщо він на це не здатний, то одна людина, яка десять разів перезавантажує сторінку, виглядає як десять людей, а число на сайті — вигадка.

Звичайне рішення — cookie-файл. Цей сайт його не використовує. Ось що використовується натомість і чому чесна версія цього речення далася не одразу.

Cookie-файл, про який ніхто не просив

До цього року кожен запит до лічильника запускав сесію PHP. Це один рядок коду, він виглядає нешкідливо, але означав, що кожен відвідувач кожного сайту з лічильником Stats4U отримував сесійний cookie-файл — встановлений нами, на чужій сторінці, без наміру з боку когось із нас.

складовіIP · UA · IDдата · сіль дняхеш16 байтівзберігається2 днісама адреса ніколи не записуєтьсясолі немає — день не перерахує ніхто, ми теж

Ця сесія ніколи ні для чого не використовувалася. Довести це було легко, щойно хтось подивився: у каталозі, де зберігаються сесії, було нуль файлів. Роками він встановлював cookie-файл на чужих сайтах, щоб зберігати дані, які ніхто ніколи не записував і не читав.

З шляху підрахунку його прибрано. Тепер сесія запускається лише тоді, коли хтось створює або переналаштовує лічильник — дія, яку людина здійснює свідомо, на цьому сайті.

Що прийшло на заміну

Відвідувачів відрізняють за хешем. До нього входить п'ять складових:

  • IP-адреса
  • рядок User-Agent
  • ID лічильника
  • сьогоднішня дата
  • секрет, який змінюється щодня

На виході — 16 байтів, які й зберігаються. Вони лежать два дні, а потім видаляються. Сама IP-адреса ніде й ніколи не записується.

Два візити однієї й тієї самої людини в один день до одного лічильника дають однакові 16 байтів, тож другий візит розпізнається як повторний. Завтра та сама людина дасть зовсім інший результат, бо змінилися і дата, і секрет. Це весь механізм.

Чому секрет змінюється

Це та частина, у якій легко помилитися, і тут вона була помилковою аж до цього року.

Стара версія використовувала один незмінний секрет. Він так само давав різні хеші для різних людей, що звучить нормально. Але це означало, що будь-хто, у кого був цей секрет, міг узяти підозрювану IP-адресу і перерахувати її хеш для будь-якого дня в архіві — перетворивши таблицю анонімних 16-байтових значень назад на запис про те, хто і що відвідував, аж до самого початку зібраних даних.

Тепер секрет змінюється щодня, а старі значення видаляються через два дні. Після цього такий розрахунок більше не може виконати ніхто. Включно з тим, хто керує цим сайтом, — і в цьому вся суть: захист, який залежить від сумлінності оператора, — це не захист, а обіцянка.

Роздільна здатність екрана і урок про видалення даних

Роздільна здатність екрана раніше збиралася. Це класична ознака для фінгерпринтингу, і вона не була вартою своєї ціни, тож її прибрали зі скрипта, який виконується на сторінці.

Але цього виявилося недостатньо, і причину варто знати кожному, хто щось розробляє для чужих сайтів. Скрипт віддається з часом життя кешу сім днів, тож старі копії ще тиждень після зміни лишалися активними в браузерах відвідувачів. Гірше того: деякі сайти взагалі не посилаються на скрипт — роками тому вони вставили його копію просто у свої сторінки, і ця копія робитиме саме те, що робила в день, коли її вставили, — назавжди.

Тож дані про роздільну здатність продовжували надходити. Рішенням стало змусити сервер відхиляти це значення, хто б його не надсилав. Прибрати збір даних із клієнта зупиняє лише нові копії клієнта. Прибрати його з сервера зупиняє все одразу.

Як це перевірити

Усе це мало чого варте як голослівне твердження, тож ось команда:

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

Відсутність виводу означає, що cookie-файл не встановлювався.

Останнє застереження, як завжди одне й те саме: тут описано, що робить програмне забезпечення. А чи відповідає це нормам, які діють у конкретній країні, — це питання до когось, хто кваліфікований на нього відповісти, і ця стаття такою відповіддю не є.

Оновлення від 11.09.2026: Від 27.08.2026 скрипт знову зчитував роздільність екрана, ширину вікна браузера та коефіцієнт пікселів на кожному сайті, який його вбудовував. Від 11.09.2026 він робить це лише там, де власник сайту вмикає таке зчитування за допомогою data-screen="1". Без цього атрибута поточний скрипт не зчитує жодного з трьох значень, а сервер більше не зберігає їх і зі старіших копій скрипта.

Реклама