Контакти

Що таке cookies і як з ними працювати. Що таке cookie і як почистити куки в сучасних браузерах Завдання cookie за допомогою META-тегів

Cookies - вірна технологія, що дозволяє веб-сайту "запам'ятати" користувача,
зберегти його налаштування і не питати кожного разу його логін і пароль. Можна, можливо
подумати, що якщо видалити кукіси в браузері, то сайт тебе не впізнає. але ця
впевненість оманлива.

Можна скільки завгодно морочитися про свою анонімності, чудова ідея
і VPN, підробляти заголовки HTTP-запитів, що видають використовувану систему,
версію браузера, часовий пояс і море іншої інформації, але у веб-сайту все одно
залишаться способи розпізнати факт того, що ти на ньому вже бував. У багатьох
випадках це не особливо критично, але тільки не в ситуації, коли на якомусь
сервісі необхідно представитися іншим користувачем або банально зберегти
анонімність. Легко уявити, як зреагує антіфрод-система якоїсь умовної
фінансової організації, якщо визначить, що з одного комп'ютера були виконані
авторизації під акаунтами абсолютно різних людей. Та й хіба приємно
усвідомлювати, що хтось в Мережі може відстежувати твої переміщення? Ледве. але
про все по порядку.

Як працюють куки?

Щоб ідентифікувати користувача, споконвіку використовувалися кукіси.
Cookies (від англ. "Печиво") - це невелика порція текстової інформації,
яку сервер передає браузеру. Коли користувач звертається до сервера
(Набирає його адресу в рядку браузера), сервер може зчитувати інформацію,
міститься в cookies, і на підставі її аналізу здійснювати будь-які дії.
Наприклад, в разі авторизованого доступу до чого-небудь через веб в cookies
зберігаються логін і пароль протягом сесії, що дозволяє користувачеві не
вводити їх знову при запитах кожного документа, захищеного паролем. Таким
чином, веб-сайт може "запам'ятати" користувача. Технічно це виглядає
наступним чином. Запитуючи сторінку, браузер відправляє веб-серверу короткий
текст з HTTP-запитом.

Наприклад, для доступу до сторінки www.example.org/index.html браузер
відправляє на сервер www.example.org наступний запит:

GET /index.html HTTP / 1.1
Host: www.example.org

Сервер відповідає, відправляючи запитувану сторінку разом з текстом,
що містить HTTP-відповідь. Там може бути вказівка \u200b\u200bбраузеру зберегти куки:

HTTP / 1.1 200 OK
Content-type: text / html
Set-Cookie: name \u003d value

Якщо є рядок Set-cookie, браузер запам'ятовує рядок name \u003d value (ім'я \u003d
значення) і відправляє її назад сервера з кожним наступним запитом:

GET /spec.html HTTP / 1.1
Host: www.example.org
Cookie: name \u003d value
Accept: * / *

Все дуже просто. Якщо сервер отримав від клієнта куки і вони є у нього в
базі, він однозначно може їх обробити. Таким чином, якщо це були кукіси з
деякою інформацією про авторизацію, у користувача в момент відвідування не буде
питатися логін і пароль. За стандартом кукі мають певний термін життя
(Хоч він і може бути дуже великим), після якого вмирають. А будь-які
збережені кукіси користувач без праці може видалити, скориставшись
відповідною опцією, яка є в будь-якому браузері. Цей факт сильно
засмучує власників багатьох ресурсів, які не бажають втрачати зв'язок з
відвідувачем. Їм важливо відстежувати його, розуміти, що "ось ця людина була у нас
вчора, а ще позавчора і т.д. ". Особливо це стосується різних аналізаторів
трафіку, систем для ведення статистики, банерних мереж і т.п. Ось тут-то і
починається найцікавіше, бо розробники використовують всякі
хитрощі, про які багато користувачів навіть не підозрюють. У хід йдуть
різні хитрощі.

Flash-куки

Вся справа в тому, що крім звичайних HTTP "булочок", до яких всі давно
звикли, зараз активно використовуються альтернативні сховища, де браузер
може записати дані на стороні клієнта. Перше, що потрібно згадати - це
сховище коханого і ненависного одночасно Flash (для тих користувачів, у
яких він встановлений). Дані зберігаються в так званих LSO (Local Shared
Objects) - схожих з cookies за форматом файлах, які зберігаються локально на
комп'ютері користувача. Підхід багато в чому аналогічний звичайним "плюшками" (в цьому
випадку на комп'ютері користувача точно так же зберігається невелика кількість
текстових даних), але має деякі переваги:

  • Flash-кукіси є загальними для всіх браузерів на комп'ютері (на відміну
    від класичної cookie, яка прив'язана до браузеру). Налаштування, інформація
    про сесії, як і, скажімо, якийсь ідентифікатор для відстеження користувача,
    не прив'язуються до якогось конкретного браузеру, а стають загальними для
    всіх.
  • Flash cookie дозволяє зберігати набагато більший обсяг даних (як
    правило, 100 Кб), що збільшує кількість налаштувань користувача,
    які можна зберегти.

На практиці LSO стає дуже простій і доступній технологією для трекінгу
користувача. Задумайся: якби я пропонував тобі видалити все "плюшки" в
системі, ти б згадав про Flash-кукис? Ймовірно, немає. А тепер спробуй взяти
будь-переглядач, наприклад, безкоштовний

FlashCookiesView і подивитися, скільки всього цікавого записано в
сховищах Flash. Тут же вимальовується і список сайтів, які дуже не хочуть
втратити твій слід, навіть якщо ти підчистити кеш браузера (разом з "булочками").

Кукіси скрізь з evercookie

Але якщо про LSO чули просунуті користувачі і мало-мальськи хороші
розробники, то про існування інших технік зберігання даних, часом дуже
витончених (але дієвих), багато хто навіть не підозрюють. Взяти хоча б нові
сховища, які з'являлися в
(Session Storage,
Local Storage, Global Storage, Database Storage via SQLite), про яких ти можеш
прочитати в статті "". Цією проблемою всерйоз заморочили польський фахівець
з безпеки Samy Kamkar. В результаті на світ з'явилася спеціальна
JavaScript-бібліотека evercookie, яка спеціально створена для того, щоб
створювати максимально живучі кукіси в браузері. Хтось може запитати: "Навіщо
це потрібно? ". Дуже просто: для того, щоб однозначно ідентифікувати
відвідувача сторінки, якщо він прийде знову. Такі складно вбиває кукіси часто
називаються Tracking cookies і навіть визначаються деякими антивірусами як
загроза приватності. Evercookie може звести всі спроби залишитися анонімним до
нулю.

Секрет в тому, що evercookie використовує відразу всі доступні для браузера
сховища: звичайні HTTP-кукіси, LSO, контейнери HTML5. Крім того, в хід йде
кілька хитрих прийомів, які з не меншим успіхом дозволяють залишити на
комп'ютері бажану мітку. Серед них: генерація особливих PNG-зображень,
використання history браузера, зберігання даних за допомогою тега ETag, контейнер
userData в Internet Explorer - виявляється, що варіантів-то дуже багато.

У тому, наскільки це ефективно працює, можна переконатися на сайті
розробника -
http://samy.pl/evercookie. Якщо натиснути на кнопку "Click to create an
evercookie ", в браузері будуть створені кукіси з випадковим числом. Спробуй
видалити кукіси скрізь, де це тільки можливо. Б'юся об заклад, зараз ти
задумався: "Де ще можна видалити кукіси, окрім як в настройках браузера?".
Упевнений, що все видалив? Перезавантажити сторінку для вірності, можеш навіть заново
відкрити браузер. Ось тепер сміливо натискай на кнопку "Click to rediscover cookies".
WTF? Сайту це не завадило звідкись взяти дані - в полях сторінки
відобразилося число, які було збережено в кукис. Але ми ж їх потерли? як
це вийшло? Спробуємо розібратися з деякими техніками.

Кукіси в PNG

Вкрай цікавим прийомом, використовуваним в Evercookie, є підхід
зберігання даних в кешованих PNG-зображеннях. Коли evercookie встановлює
куки, він звертається до скрипту evercookie_png.php зі спеціальною HTTP "плюшки",
відмінною від тієї, яка використовується для зберігання стандартної інформації про
сесії. Ці спеціальні кукіси зчитуються PHP-сценарієм, що створює
PNG-зображення, в якому всі значення RGB (квітів) виставляються відповідно
з інформацією про сесію. В кінцевому підсумку PNG-файл відправляється браузеру клієнта
з поміткою: "файл необхідно кешувати 20 років".

Отримавши ці дані, evercookie видаляє створені раніше спеціальні
HTTP-кукіси, потім виконує той же самий запит до того ж PHP-сценарієм, але не
надаючи інформації про користувача. Той бачить, що цікавлять його даних
немає, і згенерувати PNG він не може. Замість цього браузеру повертається
підроблений HTTP-відповідь "304 Not Modified", що змушує його витягти файл з
локального кеша. Зображення з кеша вставляється на сторінку за допомогою тега
HTML5 Canvas. Як тільки це відбувається, evercookie зчитує кожен піксель
вмісту Canvas, витягуючи RGB-значення і, таким чином, відновлюючи
дані початкових кукісів, які були збережені в зображенні. Вуаля, все
працює.

Хінт з Web History

Інший прийом безпосередньо використовує історію браузера. Як тільки браузер
встановлює плюшки, evercookie за допомогою алгоритму Base64 кодує дані,
які необхідно зберегти. Припустимо, що цими даними є рядок,
отримана "bcde" після перетворень в Base64. бібліотека послідовно
звертається у фоновому режимі до наступних URL:

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-

Таким чином, ці URL зберігаються в history. Далі в хід йде спеціальний
прийом - CSS History Knocker, який за допомогою JS-скрипта і CSS дозволяє
перевірити, чи відвідував користувач вказаний ресурс чи ні (докладніше тут -
samy.pl/csshack). для
перевірки булочок evercookie пробігається по всіх можливих символам Base64 на
google.com/evercookie/cache, починаючи з символу "a" і рухаючись далі, але тільки
на один символ. Як тільки скрипт бачить URL-адресу, до якого було звернення, він
починає перебір наступного символу. Виходить своєрідний брутфорс. На справі
цей підбір здійснюється надзвичайно швидко, тому що ніякі запити до
сервера не виконуються. Пошук в history здійснюється локально в максимально
короткий строк. Бібліотека знає, що досягла кінця рядка, коли URL буде
закінчуватися символом "-". Декодируем Base64 і отримуємо наші дані. як
назвати розробників браузерів, які це дозволяють?

спробуй видали

А що буде, якщо юзер потре свої кукіси? Важлива фішка самої бібліотеки
evercookie в тому, що користувачеві доведеться грунтовно постаратися, щоб
видалити кукіси, залишені в різних місцях - зараз їх 10. Якщо хоча б в одному
місці залишаться дані куки, то вони автоматично відновляться і у всіх інших
місцях. Наприклад, якщо користувач не тільки видалить свої стандартні кукіси, але
і очистить дані LSO, підчистить HTML5-сховища, що вже малоймовірно, все одно
залишаться куки, створені за допомогою кешованого PNG і web history. при
Наступного ж відвідуванні сайту з evercookie бібліотека не тільки зможе знайти
заховану плюшки, але і відновить їх у всіх інших місцях, які
підтримує браузер клієнта. Цікавий момент пов'язаний з передачею
"Булочок" між браузерами. Якщо користувач отримує кукіси в одному браузері,
то є велика ймовірність, що вони відтворять і в інших. Єдине
необхідне для цього умова - збереження даних у Local Shared Object Кука.

Як використовувати?

Бібліотека Evercookie повністю відкрита, тому ти можеш вільно
користуватися їй, підганяти під свої потреби. До сервера не пред'являється ніяких
серйозних вимог. Все що потрібно - це доступ до JS-сценарієм, в якому
міститься код evercookie. Щоб використовувати Flash-кукіси (Local Shared Object),
в папці зі скриптом повинен бути файл evercookie.swf, а для роботи технік,
заснованих на PNG-кешуванні і використанні сховища ETag, необхідний доступ до
PHP-сценаріїв evercookie_png.php і evercookie_etag.php. використовувати evercookie
можна на кожній сторінці сайту, підключивши наступний скрипт:






Сподобалася стаття? поділіться їй