Работая старшим консультантом по дижитал-аналитике в ведущем международном аналитическом агентстве, с огромным интересом наблюдаю за нынешним крестовым походом современных веб-браузеров против технологии cookie.
Оказывается, есть способ отслеживать отдельных не вошедших в систему пользователей без использования файлов cookie. Я тоже реализовал это. Сейчас покажу как.
Для наглядности я создал демо-сайт. Вот он.
Нажмите на каждую из трёх кнопок Page → На всех трёх один и тот же идентификатор.
Закройте окно браузера и снова откройте сайт → Идентификатор не поменялся.
Выключите компьютер и зайдите на эту веб-страницу завтра → Идентификатор всё тот же.
Проверьте ваши куки → Демо-сайт не записывает куки и не считывает их.
Проверьте URL → Сомнительные строки запроса отсутствуют.
Итак, как именно я могу хранить идентификатор и узнавать, что вы с определённого устройства возвращаетесь на сайт, при этом без входа в систему и без использования куки?
Мы в EDISON со всеми этими нюансами приватности сталкиваемся постоянно.
Наш новый выполненный проект — «Резидент Такси» — в котором мы связали в единое целое сайт агрегатора-такси, CRM-систему, блок контроля водителей и автомобилей, мобильные приложения для iOS и Android.Однако, всегда учитываем: безопасность каждого пользователя — это святое ;-)
Cookies используются всё меньше
Если вы достаточно активный пользователь интернета, вы наверняка так или иначе сталкивались с бесконечными дискуссиями относительно файлов cookie и о том, как они используются. В настоящее время браузерные технологии всё чаще отказываются от куки — тем паче что сейчас всё строго зарегламентировано правилами конфиденциальности, такими как GDPR или CCPA. Хотя это, безусловно, прогресс, так как является важным шагом на пути к более ориентированному на конфиденциальность интернету, однако с другой стороны также наносит огромный урон основной функциональности большинства веб-сайтов, их UX, экономической структуре интернета и индустрии дижитал-аналитики. Хотя в техническом аспекте использование cookie-файла браузером в качестве идентификатора для возвращающегося пользователя весьма надёжно, есть и другие веб-технологии, основанные на хранении информации на локальном компьютере.
Роль кэша
Вот кэш. По сути, веб-кэширование означает хранение данных из интернета на вашем устройстве, поэтому браузер может повторно использовать эти данные позже, когда тот же ресурс запрашивается снова. Например, когда пользователь загружает веб-страницу впервые, сервер страницу полностью отправляет браузеру. Когда страница закэшируется, и пользователь запрашивает ту же страницу снова на следующий день, браузер запоминает её, и серверу не нужно отправлять ее снова, страница в браузере может быть сразу отображена из кэша. Это гораздо быстрее, да и обеспечивает высокую пропускную способность. В целом, технология кэширования значительно увеличивает скорость доставки веб-контента, а также значительно сокращает объём работы, выполняемой на стороне сервера.
Кэширование может быть выполнено с использованием ETag. Это такие идентификаторы, которые прикрепляются к каждому ресурсу, предоставляемому сервером (например, веб-странице или изображению). Таким образом сервер выясняет, кэшировал ли пользователь самую новую версию ресурса. Когда ресурс на сервере изменяется, для этого ресурса создается новый идентификатор ETag.
- Понедельник.
Пользователь заходит на веб-сайт впервые. → В запросе отсутствует ETag. → Страница сайта отправляется в браузер с ETag 123. → Сайт сохраняется (кэшируется) на локальном устройстве. - Вторник
Пользователь снова заходит на тот же сайт → ETag 123 включён в исходящий запрос → Сервер проверяет, изменился ли ресурс («Идентификатор ETag остается прежним?») → Если ETag не изменился, сервер инструктирует браузер: просто используйте сайт, который был уже доставлен и кэширован в понедельник. → Нет необходимости веб-ресурс пересылать повторно, время и трафик экономятся. Profit.
Использование технологии кэширования для отслеживания и идентификации пользователей
Хотя ETag предназначен именно для кэширования, эта функция также может быть взломана и преднамеренно использована для отслеживания пользователей.
Вот как это сделал я в моём примере:
- Создаётся простой сайт с тремя страницами.
- Вставляется один и тот же iFrame на каждую страницу. Этот iFrame — просто белый пиксель 1x1, который невидим для пользователя.
- Когда запрашивается этот веб-ресурс iFrame, с помощью PHP генерируется случайный идентификатор на стороне сервера. Я использую этот идентификатор, чтобы переопределить идентификатор ETag для iFrame, который обычно сервером выдаётся автоматически.
- Каждый раз, когда пользователь запрашивает одну из трёх страниц (и, следовательно, запрашивает iFrame), мой идентификатор ETag включается в запрос. Затем проверяется на стороне сервера, существует ли этот идентификатор или это первый запрос без ETag.
- → Если ETag существует: значит, это вернувшийся посетитель. Можно зафиксировать как удостоверение его личности.
- → Если ETag не существует: это новый посетитель. Новый ID. С этого момента этот идентификатор будет включен во все заголовки запросов устройства этого пользователя на сайте.
- В качестве последнего шага — вот как этот ETag ID попадает в аналитику:
я беру ID из заголовков запроса/ответа в iFrame на стороне сервера. Невидимый для пользователя, этот iFrame теперь содержит идентификатор пользователя. Затем я использую JavaScript на стороне клиента и просто включаю этот идентификатор в свой запрос отслеживания аналитики вместо идентификатора файла cookie.
Поиск ETag ID iFrame с помощью Chrome DevTools.
Как предотвратить отслеживание с помощью ETag
Это может быть достаточно непросто. Здесь не используются куки или локальное хранилище браузера. Работает без участия JavaScript. И не используется User-Agent.
Однако у пользователей есть несколько вариантов защиты от отслеживания ETag:
- Отключите в настройках браузера кеширование.
Тут следует соблюдать осторожность — как пояснялось выше, кеширование может быть очень полезным и имеет много преимуществ. - Модифицируйте заголовки headers с помощью надстройки браузера.
Хотя большинство браузеров изначально не предоставляют возможность изменять headers, для этой задачи существует множество доступных расширений браузера, таких как ModHeader. Почему это работает? Функциональность ETag опирается на заголовки запроса и ответа для обмена идентификатором. Например, если пользователь перезаписывает заголовок If-None-Match, чтобы он был пустым при каждом запросе, новое значение ETag будет генерироваться при каждом запросе страницы. Это предотвращает идентификацию устройства пользователя.
Почему это важно
Почему я проверяю эти вещи? Почему я написал эту статью? Я, разумеется, не намерен использовать это в широких масштабах. Но хотя ETag может использоваться и нехорошими людьми, этот пример демонстрирует важную мысль: как и большинство других технологий, по умолчанию ETag не обязательно вреден. В зависимости от того, для каких целей это используется.
Я считаю, что для всех важно знать, про существование подобных методов. И что они могут быть использованы. Было довольно много случаев, когда сайты использовали ETag незаконно. Некоторые из этих инцидентов были даже урегулированы в суде. И вполне вероятно, что подобные методы будут всё чаще использоваться перепуганной рекламной индустрией, которая наблюдает за тем, как рушится один из её столпов: coockie.
Один из многих (безопасных) примеров ETag в интернете можно найти, к примеру, в политике конфиденциальности сети быстрого питания Wendy в отношении файлов cookie и технологий отслеживания:
С помощью ETag можно генерировать уникальные значения отслеживания, даже если пользователь блокирует файлы cookie HTTP, Flash и/или HTML5.
Подобное объявление, похоже, является примером того, как многие сайты используют ETag в своей политике конфиденциальности. Чтобы было ясно: это само по себе не является ни плохим, ни незаконным. Конечно, значения ETag должны быть уникальными. В этом весь смысл их работы в целях кэширования. Однако этот раздел сформулирован очень расплывчато и неоднозначно, особенно когда речь идет о том, используются ли эти значения ETag для отслеживания или нет. И лично я считаю это проблемой. При запросе в отдел конфиденциальности Wendy, они ответили стандартным электронным copy-paste письмом, подтверждающим, что ETag не используются для отслеживания. Политика конфиденциальности, однако, оставляет эту дверь широко открытой. И это то, что меня беспокоит.
Я верю в открытую и прозрачную передачу знаний в отрасли — среди поставщиков аналитики, издателей, рекламщиков и пользователей Интернета. ИМХО, отсутствие открытости является одной из основных причин, по которой мы все оказались втянуты в эту грязную войну с cookie-файлами: интернет-экосистема всегда страдала от недостатка прозрачности, технологии развивается слишком быстро, чтобы законодательство успевало за ними, и люди не понимают многочисленные тонкости веб-технологий, наподобие файлов cookie. И когда технологии используются ненадлежащим образом, пользователь по понятным причинам чувствует себя уязвлённым. Но запрет технологии оказывается классическим случаем борьбы с симптомами, а не с причиной. Тот факт, что многие технологические компании злоупотребляют такими технологиями, как файлы cookie, формирует несправедливое отношение к технологии со стороны общественности. Что, в свою очередь, приводит к несоразмерным мерам со стороны разработчиков браузеров и законодательства. Хотя эти меры нацелены на обеспечение приватности, они в то же время наносят вред хорошим и значимым инновациям.
Всегда есть нюансы. Я твёрдо верю в законность и важность серьёзной дижитал-аналитики — до тех пор, пока она выполняется с должным уровнем соблюдения конфиденциальности. Что происходит после, когда магазин законно идентифицировал посетителя? ETag, безусловно, можно использовать в разных целях. Но одно можно сказать наверняка: эта тема никогда не станет скучной.
Автор: Thomas Alva