Фингерпринтинг браузера. Как отслеживают пользователей в Сети. Проблема идентификации пользователей HTML5 и хранение данных
Сегодня существует много способов идентифицировать и устроить слежку за пользователем в сети. Изначально слежка за пользователем была придумана с целью отличить реального пользователя от бота. Затем этим способом воспользовались рекламные компании. Рассмотрим наиболее распространенные способы.
Куки – это самый старый и популярный метод идентификации пользователя. Хранит короткие отрезки текстовых данных. На стороне пользователя устанавливается идентификатор (cookie), который запрашивается при последующих обращениях к сайту. Для блокировки куки можно установить соответствующие плагины в браузер, либо использовать его в режиме “инкогнито”.
Многие не чистят куки или боятся их удалять (некоторые используются для авторизации на сайте).
Local Shared ObjectsЭтот механизм используется для хранения информации на стороне пользователя в adobe flash. В отличие от cookie может хранить большие объемы информации.
При настройке браузер ищите, как отключить именно флэш-куки .
Хотите анонимности в сети – не устанавливайте Adobe flash плеер.
Хранилище SilverlightПлатформа Silverlight похожа на Adobe flash. Здесь используется Isolated Storage для хранения всей информации о пользователе.
Минус : через настройки браузера невозможно удалить уникальные идентификаторы. Даже если вы используете режим “Инкогнито”, почистите историю и удалите все куки, информация о вас все равно останется в хранилище Silverlight.
HTML5 и хранение данныхДля хранения данных HTML5 использует:
- localStorage.
- File Api.
- Indexed DB.
Объем хранилища может быть огромным.
Однако вручную удалить все данные пользователя из этих хранилищ не совсем понятно как.
Кешированные объектыДля быстрой загрузки страниц повсеместно используется кеширование. В локальный кеш записываются все объекты с посещаемого сайта. Здесь же прописывается время жизни кеша (заголовок Expires). При повторном обращении к сайту загружается локальная копия.
С другой стороны, отключение кеширования может замедлить загрузку страниц сайта и выполнение JavaScript.
ETag и Last-ModifiedДля правильной работы с закешированным содержимым страниц сервер должен информировать браузер, что документ обновился. Для этой цели используют ETag и Last-Modified.
ETagСначала с кешированной страницей сервер передает version tag. В будущем будет проверяться эта версия на правильность. Если версия тега совпадает с загружаемой страницей – грузится локальная копия, если версия изменилась – грузится новая страница с сервера.
Чем-то это напоминает работу куки, когда сервер сохраняет произвольное значение на стороне клиента, чтобы потом его снова считать.
Last-ModifiedLast-Modified сообщает дату последнего изменения документа.
Чтобы избавиться от ETag и Last-Modified, нужно чистить кеш. Чистка куки и истории не поможет.
HTML5 AppCacheApplication Cache позволяет сохранять какую-то часть сайта, чтобы она была доступна оффлайн.
Чтобы удалить данные из этого хранилища на одних браузерах нужно удалить весь кеш, на других – очистить куки и историю.
SDCH-словариТакие словари используют сжатые данные посещенных страниц. Большинство сайтов сегодня работают на CMS, у них несколько повторяющихся блоков для всех страниц (футер, сайдбар, шапка). Чтобы каждый раз не запрашивать эти одинаковые блоки, сервер подготавливает для клиента SDCH-словарь (сжатый архив). Далее при последующих обращениях к страницам сайта сервер ссылается на данные из этого словаря.
Такие словари можно использовать и для хранения уникальных идентификаторов пользователя.
“Отпечатки” браузераНикаких уникальных идентификаторов на стороне клиента не устанавливается. Сервер берет набор данных из среды браузера и объединяет их:
- User-Agent – версия браузера, операционная система, установленные расширения.
- Время на компьютере клиента.
- Информация об установленном железе на компьютере. Это можно узнать через бенчмарки и тесты, реализованные на javaScript.
- Разрешение монитора, размер окна браузера.
- Установленные шрифты в системе + установленное ПО на компьютере (некоторые программы корректируют отображение веб-страниц, поэтому можно легко их определить).
Идентифицировать пользователя можно и по структуре локальной сети, настройкам сетевых протоколов. Сюда включены: ip-адрес, MAC-адрес, номера портов для исходящих и входящих TCP/IP-соединений, локальный IP (если пользователь скрыт за прокси).
Поведенческий анализ и привычкиПо поведению легко можно идентифицировать почти любого пользователя. Сюда входят: история просмотров, движения мышкой, частота нажатий кнопок, настройки браузера.
Как идентифицировать посетителя?
Когда-то давно для этой задачи были придуманы Cookie.
Однако есть гораздо больше способов идентификации. Многие технологии так или иначе передают информацию о пользователе и компьютере.
Все это позволяет "узнавать" даже посетителя, который специально удалил куки, сменил браузер и перешел на другой IP.
ПримерыНекоторые примеры подобных сервисов есть в интернете.
PanopticlickПример - ниже. Там iframe с адреса , по нажатию на Save сохраняет данные из текстового поля во все доступные хранилища, по Load - восстанавливает.
Кнопка Refresh перегружает страницу. А впрочем, можно и браузер переоткрыть, разницы не будет.
navigatorС помощью Javascript доступен замечательный объект nagivator , содержащий полную информацию о браузере посетителя и название его OS.
for(var prop in navigator) { if (navigator instanceof Object || navigator==="") continue document.writeln(prop+": "+navigator) }
Многие из этих свойств не изменяются даже при обновлении мажорной версии браузера, не говоря уже минорной.
screenДля полноты картины все об экране посетителя расскажет объект screen .
for(var prop in screen) { if (navigator instanceof Object || screen==="") continue document.writeln(prop+": "+screen) }
Плюс этой информации - в том, что этот компонент подписи очень стабилен и не меняется почти никогда.
navigator.pluginsДля всех браузеров, кроме IE, этот объект содержит информацию о плагинах и их версии. Посмотрите сами:
var prev
for(var i=0;i