Нагруженные бэкэнды
21,8
рейтинг
22 сентября 2010 в 09:32

Разработка → Evercookie — самые устойчивые куки

Samy Mamkar разработал систему, которая позволяет хранить куки в 8 местах, автоматически восстанавливая друг друга, и даже добиться того, чтобы куки, поставленное в одном браузере, действовало и в другом.

Удалить это куки практически невозможно! (Все возможно, конечно, но слишком много мороки)

Куки хранятся в:
  • HTTP Cookies;
  • Local Shared Objects (Flash);
  • Сохранение куки в значениях RGB автосгенерированных и форсированно кэшированных PNG с использованием HTML5 canvas;
  • Сохранение куки в Web History;
  • HTML5 Session Storage;
  • HTML5 Local Storage;
  • HTML5 Global Storage;
  • HTML5 Database Storage через SQLite.

При удалении из одного из этих мест кука автоматически восстанавливается из оставшихся. Работает даже если пользователь сменит браузер (через Local Shared Objects из Flash).

Описание (на английском) и демо: http://samy.pl/evercookie/.
Попробуйте удалить куки, почистить систему и зайти назад.



Как пользоваться?

Скачать .js

<script type="text/javascript" src="evercookie.js"></script>
<script>
  var ec = new evercookie();
  ec.set("id", "12345");  // установить
  ec.get("id", function(value) { alert("Значение куки " + value) });  // прочитать
</script>

Добро пожаловать в конец анонимности.

UPDATE
Дополнение из комментариев (информация не проверенная и найти подтверждение пока не могу):
squint:
Автор заметки забыл сказать, что куки кросс-доменные, и хранить в них конфиденциальную инфу нельзя

Вот что написано в начале файла evercookie.js
*!!! SOME OF THESE ARE CROSS-DOMAIN COOKIES, THIS MEANS
* OTHER SITES WILL BE ABLE TO READ SOME OF THESE COOKIES!!!
Слава Вишняков @yoihj
карма
660,8
рейтинг 21,8
Нагруженные бэкэнды
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (68)

  • +33
    … вот сволочи!
  • +7
    Прощай анонимность.
  • +41
    ждём выхода клинера, что автоматом чистит все источники :)
    • –2
      sudo rm -rf /
  • –4
    такой проект при правильном подходе можно было б продать Google
    • +4
      Вы серьезно думаете, что он — первый кто до этого додумался?
      • +2
        … вспоминая (уже потертый) топик о Steven Rambam «The next HOPE»…
        • +11
          Отличная статья. Я часто на неё ссылаюсь в своих лекциях. Жаль что она была потёрта на Хабре.

          Я связался с автором перевода и продублировал статью у себя в ЖЖ. Поскольку из кэша она тоже уже исчезла.

          yasha-somov.livejournal.com/17398.html

          не является рекламой.
          • 0
            Пропустил этот материал на хабре, прочитал у Вас!

            Большое спасибо, было очень познавательно. Все это, на самом деле, понятно, но обобщенно прочитав задумываешься еще раз.
            • 0
              В отличии от хабра в жж можно выкладывать очень короткие записи. Пришлось разбить статью аж на 8 частей.

              Пока выложил только 4.

              Спасибо.
              • 0
                может вернете ее на хабр с разрешения автора?
                • 0
                  Мне неизвестна подоплека, но по всей видимости это невозможно.
                  • 0
                    Да просто потому, что там эмоционально изложенная желтуха вперемешку с Капитаном Очевидность. Что-то типа: «Если вы писали в Твиттер, то об этом может узнать каждый, бида-бида!!! И каждый пост на форуме, который вы подписали именем-фамилией-отчеством — тоже можно найти, вот оно как!!» вперемешку с «А по вашему номеру соцстрахования я расскажу про вас всё!», при этом «забывая» добавить «… если, конечно, я уже занимался расследованием фактов о вас раньше и сохранил это всё в моей базе.»
      • +1
        Собственно я о том, что гиганты наверняка уже используют подобные системы in-house, так что им покупать это нафиг не надо, у них своих систем слежения хватает.
  • 0
    а жить становится все страшнее…
  • +3
    Как интересно… 8 мест хранения кук, а 4 из них — в основе HTML5.
    • +5
      5 мест ;)
      Сохранение куки в значениях RGB автосгенерированных и форсированно кэшированных PNG с использованием HTML5 canvas;
  • +4
    «Пастернака не читал, но...», в общем ерунда это все по-моему, без local shared objects межбраузерность работать не будет, а с ними — другие места хранения на фиг не нужны.
    • +2
      Вам не нужны. А тем, кто хочет следить за своими пользователями — нужны. Кроссбраузерность — это так больше — (не)приятная дополнительная плюшка.
      • +7
        Да тоже это все ерунда :P

        Когда например не в меру вумные веб-мастера начали вставлять в страницы проверку «Пажалуйсто зойдите в ынтернет експлорере!» — в браузерах появились механизмы маскировки под оный.

        Другие примеры — у frame'ов порезали доступ к содержимому фрейма загруженного с другого домена, потому xmlhttprequest уже по-моему из коробки не позволяет себе такого, в большинстве wysiwyg-редакторов на кнопке «вставить» висит заглушка «нажмите ctrl+v» опять-же из-за проблем с доступом к чужому буферу обмена, потому все к чему приведет такое вот использование новых фич html5 — это то что порезаны они будут в итоге по самое не балуй, и пользоваться ими станет невозможно.

        Ну это так… пессимизм веб-разработчика :) А по факту следить за пользователями можно было и раньше, было-бы желание, например давно доступны возможности получить версию ОС и разрешение экрана пользователя, ип-адрес (ну это вообще базовое), уже по одним этим параметрам можно сопоставить пользователя с сессией если он вдруг потер куку.
  • –2
    Samy Mamkar смелый парень
  • 0
    Надо заюзать…
  • +2
    Noscript?
    • –2
      HTTP Cookie и Flash всё равно повесят.
      • +3
        Как? Если весь механизм вешания на js?
        • 0
          Это недостаток реализации, нет?
    • +2
      noscript == nologin
  • 0
    Firefox\CookieSafe

    Cookie found: id = *checking*

    неработает
  • 0
    Хех… чувствую, не за горами массовый переход на IE6 без флэшь-объекта, с отключенными куки и хистори )))

    Думаю, это можно использовать для глобального счетчика посещений сайтов ))) И отслеживать не пути пользователя по сайту, а пути по сайтАМ )))
  • 0
    В приватном режиме chrome (7.0.517.8 dev) не работает. В firefox не работает совсем.
    • –1
      Я тоже проверил в фаерфоксе — не работает в приватном. Прям таки гордость взяла за любимый браузер.
  • +1
    Пользуюсь такой техникой на одном сайте уже года 3… сам когда-то допер до такого, даше флэшку сделал пиксельную, которая объекты в LSO складывает и восстанавливает в случае необходимости их в кукисы.
    Все это легко обходится одновременно чисткой всего. А во флеше это сделать и вовсе просто теперь стало: www.macromedia.com/support/documentation/ru/flashplayer/help/settings_manager07.html
  • 0
    При включенном Noscript требует сначала включить яваскрипт, потом флэш-объект.
    Потом выдает всем один и тот же результат «eleet».
  • 0
    Ну, ерунда — не ерунда, а lso мне так и не удалось потереть, просидел полчаса безрезультатно. Даже не помог плагин BetterPrivacy для Firefox.
  • +7
    Неправильное название!
    EvilCookie в самый раз.
  • +4
    Автор заметки забыл сказать, что куки кросс-доменные, и хранить в них конфиденциальную инфу нельзя
    • +1
      Добавил в статью, но откуда информация?
      • +2
        Вот что написано в начале файла evercookie.js
        *!!! SOME OF THESE ARE CROSS-DOMAIN COOKIES, THIS MEANS
        * OTHER SITES WILL BE ABLE TO READ SOME OF THESE COOKIES!!!
        • +1
          Добавил в топик, спасибо за важную находку — в самой оригинальной статье про это ни слова.
          • 0
            Уберите тогда слова «информация не проверенная», ну и заодно мой ник тоже
  • 0
    слабо
    хранить нужно как минимум в 20 местах
    плюс иметь несколько распечаток кукисов, хранящихся (распечаток) в пожаростойких сейфах
  • 0
    Еще можно сохранять «сессию куки» в E-tag
  • +5
    Шикарно. Заюзаем это в Народном голосовании 2010 :-)
  • +1
    Можно использовать дополнительный сайт, который тоже будет хранить куки и взаимодействовать с главным сайтом. Пример: на сайте main.com размещается рисунок размером 1х1 с адресом cookie.com/getcookie, оттуда идет перенаправление на main.com/setcookie?a=b&c=e.
  • +2
    Давно пользуемся подобным решением, но пока без интервенции в HTML5. Из фиксов рекомендую:
    1. Учесть, что кука должна выстрелить еще и по HTTP, чтобы ее поймал даже тот, кто на текущей странице не успеет прогрузить JS (всякое бывает).
    2. Добавить контроль над перечнем доменов, в рамках которых действует кука.
    3. Учесть, что флеш на сайтах www.i.ru и i.ru будет видеть разные SharedObject.
    4. Учесть, что если решение фикса (3) будет путем привязки к флешу на одном домене (со всех субдоменов будет подключаться флеш с www.i.ru и ниоткуда больше), а далее планируется к флешу добавить «стучалку» на основе этой куки, то понадобится прописать в доменах crossdomain.xml для политики безопасности флеша.
    • +1
      4. И еще лучше: вставлять два флэша: с www.i.ru и с i.ru
      • 0
        Зачем? Лучше всегда вставлять фиксированный флеш, аля www.i.ru/tracker.swf, который будет всем заведовать, независимо от того, с какого субдомена прошел проброс куки.
        • 0
          Будет хранить на двоих доменах куку — меньше риск удаления
  • +2
    Ну значит ждите вскоре скрипт, в автоматическом режиме вычищающий эти evercookies.
    • 0
      Вот только появится он в лучшем случае у 0.01 % всех пользователей)
      • 0
        у тех, кому действительно нужна анонимность.
        Лично я скорее всего не войду в этот 0.01%.
        Не настолько нужна анонимность, чтобы прилагать значительные усилия.
        • 0
          Простые куки научились удалять уже едва ли не половина пользователей…
  • 0
    «Против лома нет приёма, акромя другого лома!»") Так что и появятся преблуды для одновременного удаления всех куки — это 100%!
    • 0
      Можно просто винду ОС переустановить, этот способ же не гарантирует 100% сохранности. Но для 99% среднестатистических пользователей может неплохо отработать
  • 0
    Работает даже если пользователь сменит браузер (через Local Shared Objects из Flash).
    Этому есть подтверждение? проводил эксперименты с этим, куки в браузерах не пересекались
    • +2
      LSO не зависит от броузера. Это давно известно. Погуглите про такую занятную «штучку», как iesnare… Ей paypal пользуется, skype с недавних пор и еще много кто.
    • 0
      У меня пересеклись во всех броузерах (FF 3.6, Opera 10, IE 8, Хром 6)
  • 0
    кстати, а есть и вовсе простое решение: виртуальные машины :)
    Вот кто из нас, господа веб-разработчики, не использует виртуальных машин для оценки качества собственной вёрстки в браузерах, работающих на другой ОС? Так ведь это же не единственное возможное применение виртуальных машин. Между разными виртмашинами передаются ли эти куки?
  • 0
    Зашел, получил id=3735562. Удалил cookie через firebug, обновил через F5, id=24966052. Что я делаю не так?
  • 0
    Прикольный скрипт, с подобной реализацией ещё не сталкивался.
    Добавил в избранное, уже прикинул, где буду в будующем использовать.
  • 0
    Как уже сказали не раз, идея не нова. И то, что автор выложил готовый к применению код, это только хорошо. Хорошо в том плане, что раз про это уже наслышаны все, теперь противодействие должно появиться и распространиться достаточно быстро. Примерно так же, как публикация эксплоитов обесценивает их.
  • 0
    четное количество мест, что если значение в первых четырех будут отличатся от вторых четырех. Голосованием решить не получится
  • 0
    А вот долбаный касперский ругается на Evercookie.js ;(
  • 0
    Похоже это уже не работает. По крайне мере между браузерами в Win8 ничего не сохраняется, да и в одном и том же браузере чистится очень хорошо в наше время. Эээххх…
    • 0
      У меня работает, но из под хрома в убунте 1404 в режиме инкогнито виснет комп)

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