Cookie без куков

http://lucb1e.com/rp/cookielesscookies/
  • Перевод

Отслеживание



Как мы обычно отслеживаем посетителей сайта? Одним из следующих методов:

  • cookies
  • javascript
  • local storage
  • flash, java, иные плагины
  • ip-адрес и UserAgent


Допустим, пользователь отключил всё это (и ходит через прокси или даже vpn). Есть ли способ всё-таки его отследить?
Оказывается — да. Это кэш браузера.

Демонстрация технологии находится на странице оригинальной статьи.

Объяснение работы



image

Для того, чтобы определить, надо ли загружать статичный контент, в общении браузера с http-сервером используется ETag. Это контрольная сумма, которая должна меняться вместе с изменением файла.

При первой загрузке файла (например, изображения) браузер получает ETag. Потом он передаёт этот etag серверу, и тот проверяет, не поменялась ли контрольная сумма, и следовательно — файл.

Становится понятно, что вместо использования по назначению, веб-сервер может использовать этот etag как идентификатор пользователя.
Если etag нет, отдаём новый. Если прислали etag, ищем его в базе пользователей, и отдаём его же.

У технологии есть недостатки — картинка грузится после того, как загрузится страница, поэтому пользователь увидит информацию от своего предыдущего посещения. Однако, если эта технология используется для скрытого слежения, то это никому не мешает.

Вывод: если вы хотите на 100% защититься от отслеживания, вам придётся отключить все плагины, яваскрипт, куки и кэширование страниц. Хотя, полагаю что мега-параноики и так всё это отключили.

На гитхабе доступны исходники работающего прототипа программы отслеживания от автора статьи.
Метки:
Поделиться публикацией
Комментарии 27
  • +16
    Это великолепно!
    • +38
      > Оказывается — да. Это кэш браузера.
      Ну это не новость совсем.
      Вот, например, статья от 2003 года, где рассматривается эта техника: www.arctic.org/~dean/tracking-without-cookies.html

      Всё новое — хорошо забытое старое.
      • –11
        обычно ставят проверки, и юзер которого нельзя идентифицировать получит об этом сообщение. Подумал-подумал и не нашел применения я этой фичи
        • 0
          Тут смысл не в использовании этой функции как дополнения методов идентификации, а в её использовании, когда другие методы отключены пользователем или недоступны.
        • +20
          Это один из восьми способов, которым пользуется evercookie, которым уже несколько лет как )
          • 0
            Который легко убивается Incognito mode в Chrome и InPrivate в IE.
          • +2
            Я просто оставлю это здесь
            • 0
              Упоминается в оригинале, в том контексте что даже там такой идентификации не предусмотрено.
              • 0
                У ip-check.info более подробная проверка, включая кэш браузера.
              • 0
                От этого спасает использование portable версий браузеров, в каждом из которых будет свой кэш, своя кука и т.д.
                Но тема интересная. Теперь кроме кук, еще и файловый кэш чистить придётся :)
                  • 0
                    А еще есть хак с историей.
                    Например, сохраняем строку abc.
                    Совершается 3 запроса:
                    http:/url/a
                    .../ab
                    .../abc

                    затем есть функция, умеющая отличать посещённую ссылку от непосещенной, и она перебирает нужные данные, пока не встретит завершающий символ.
                    И да… это все делается без запросов к серверу, поскольку идет работа с историей браузера
                    • +1
                      Насколько я помню эта функция не работает как минимум в лисе, потому что стили посещенной ссылки отдаются яваскрипту такими же, как и у непосещенной
                      • +1
                        Сейчас уже ни у кого не работают.
                        • 0
                          Да, сорри, устарело :)
                    • НЛО прилетело и опубликовало эту надпись здесь
                      • –6
                        image
                        • +6
                          Есть еще один гораздо более близкий к кукам механизм, который активно используется трекерами типа TNS, но о котором почему-то мало бузят. Это TLS Session Ticket которые описаны в www.ietf.org/rfc/rfc5077 и поддерживаются и в Chrome и в Firefox. Суть весьма простая — фактически, это та же самая кука, но на уровне TLS, сервер скармливает любые данные и клиент их возвращает при следующем TLS-коннекте. Напишите статейку о нем, окружающим будет полезно знать.
                          • 0
                            А вы не занимались вплотную? Резим Incognito хрома подвержен такой идентификации (остальные вроде не работают)?
                            • +3
                              Судя по комментариям подвержен частично, т.к. для режима инкогнито используется отдельный кэш (net: split the SSL session cache between incognito and normal) хотя изначально патч предполагал полный отказ от идентификаторов сеанса (Incognito mode does not use TLS Session IDs at all — support for TLS Session Resumption is disabled completely). Причем до сих пор нет возможности сбросить кэш.
                          • +1
                            Можно, кстати, генерировать не просто img с именем контрольной суммы, а, еще само изображение дополнить шифродатой (0 — белый, 1 — черный пиксель) — старый достаточно трюк.
                            • 0
                              ip-check.info тоже годен
                              • +1
                                > У технологии есть недостатки — картинка грузится после того, как загрузится страница, поэтому пользователь увидит информацию от своего предыдущего посещения.
                                А нельзя на саму страницу вешать ETag и менять его каждый раз, обновляя соответствие в своей базе ID Пользователя <-> ETag?
                                • +1
                                  Отлично. Вы узнали, что в запросе на отдачу это такой-то пользователь. И вот он заходит на другую страницу, которую ещё не загружал, запрашивает /GET index2.html, как вы узнаёте, что это он же? Если даже поместить в этот index2.html ту же картинку, на неё следом, после получения index2.html пойдёт отдельный запрос. И будет уже поздно вписывать в страницу «Дорогой пользователь такой-то, мы вас узнали», потому что от кого именно пришёл запрос на index2.html — не понять. Если вы, конечно, не хотите в адресную строку добавлять ?_session_id=.
                                  Аналогично с local storage, это локальный механизм хранения на пользовательской стороне, а не передачи состояния.
                                  Так что такая штука пойдёт разве что для дополнительной защиты параноиков. Которые уже наверняка сидят из shell'а lynx'ом.
                                  • 0
                                    Баннерная сеть (баннер которой встроен во множество сайтов) может быстро изучить ваши предпочтения и показывать релевантную рекламу, даже если у пользователя выключены third-party cookies.
                                    Не знаю, что там делает средний параноик, но полезно представлять себе все возможные пути идентифицирующей информации.
                                    В моей молодости на местном форуме некто написал из-за прокси нехорошее сообщение.
                                    У него оказался достаточно уникальный User-agent, поэтому располагая даже только логами со стороннего ресурса (хостинг картинки для подписи итд) обнаружить негодяя не составило труда.
                                  • +1
                                    Я думаю, еще можно идентифицировать по паттернам поведения большинство постоянных пользователей сайта… :)
                                    • 0
                                      Думаю ребята из Школы Анализа Данных гугла иди яндекса знают такие методы, которых здесь мало кто догадывается.

                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.