Очередной приступ паранойи был вполне обоснован — он наступил после прочтения статьи о методах анонимности в сети, где автор на примере браузера FireFox рассказывал о потенциальных утечках идентификационной информации. И стало интересно — а на сколько озвученные решения применимы, скажем, к браузеру Google Chrome?
Скрыть реальный IP — используем разные VPN сервера, отключить львиную долю отслеживающих скриптов — Adblock Plus и Ghostery, убрать Referer — не вопрос, что то ещё забыли… Ах да — User-Agent — своеобразный «отпечаток», по которому (в связке, скажем, с IP) легко идентифицировать пользователя. И с этим надо было что-то делать. Найденные решения лишь статично изменяли значение User-Agent, чего было явно недостаточно. Тогда и было решено написать плагин для скрытия реального User-Agent'a, а если быть точнее — подменять его на рандомный. Или почти рандомный.
Вообще, User-Agent (далее по тексту — UA) — штука нужная. Нужная в первую очередь для корректного отображения страниц, ведь нам всем известно — разные версии разных браузеров по разному рендерят странички, и заботливые web-программисты учитывают этот факт, выдавая разным браузерам разные скрипты и стили. Разные версии «движков» поддерживают разные технологии. Отсюда вытекает первое требование к итогу — нужно иметь возможность «имитировать» различные браузеры, и что самое важное — иметь возможность выбора между ними.
UA — это в первую очередь набор. Набор различных идентификаторов, по которым и происходит определение — какой браузер, какая операционная система, какой версии, и какое специфичное ПО (привет, IE) стоит у пользователя.
Почему именно IP и UA надо скрывать в первую очередь? А давайте посмотрим на лог пустого сайта-заглушки, на котором вообще ничего нет:
Итак, решено — подставляем фейковый UA. Но как его сформировать? Я пошел по пути собирания с десятка UA каждого интересующего браузера, и написания регулярки для каждого, которая будет генерировать максимально правдоподобный и в то же время а какой-то мере уникальный отпечаток. Хотите пример? Вот вам 10 UA браузера «IE 9», и среди них пять настоящих. Сможете отличить?
Да, это возможно, но для это нужно анализировать. Анализировать, например, какие .net могут стоять на каких ОС, анализировать версии и сочетания, нюансы. Когда они теряются в куче — задача становиться мало тривиальной. Кому интересно как выглядят регулярки — добро пожаловать по этой ссылке. Дня генерации использовал randexp.js (за подсказку спасибо хабрачуваку под ником barkalov).
Что ещё интересного? Автоматизация. Отмечаешь галочками какие браузеры мы имитируем, ставишь галочку «Обновлять автоматически», указываешь интервал времени, и забываешь. Ничего лишнего. Для любопытных — посмотрите в консоли «фоновую страницу» — там всё не плохо залогировано.
Буду очень признателен конструктивной критике и предложениям.
Скрыть реальный IP — используем разные VPN сервера, отключить львиную долю отслеживающих скриптов — Adblock Plus и Ghostery, убрать Referer — не вопрос, что то ещё забыли… Ах да — User-Agent — своеобразный «отпечаток», по которому (в связке, скажем, с IP) легко идентифицировать пользователя. И с этим надо было что-то делать. Найденные решения лишь статично изменяли значение User-Agent, чего было явно недостаточно. Тогда и было решено написать плагин для скрытия реального User-Agent'a, а если быть точнее — подменять его на рандомный. Или почти рандомный.
Для нетерпеливых сразу: исходники на GitHub и расширение в Google Webstore.
Немного теории
Вообще, User-Agent (далее по тексту — UA) — штука нужная. Нужная в первую очередь для корректного отображения страниц, ведь нам всем известно — разные версии разных браузеров по разному рендерят странички, и заботливые web-программисты учитывают этот факт, выдавая разным браузерам разные скрипты и стили. Разные версии «движков» поддерживают разные технологии. Отсюда вытекает первое требование к итогу — нужно иметь возможность «имитировать» различные браузеры, и что самое важное — иметь возможность выбора между ними.
UA — это в первую очередь набор. Набор различных идентификаторов, по которым и происходит определение — какой браузер, какая операционная система, какой версии, и какое специфичное ПО (привет, IE) стоит у пользователя.
Почему именно IP и UA надо скрывать в первую очередь? А давайте посмотрим на лог пустого сайта-заглушки, на котором вообще ничего нет:
[meow@hosting /var/log]$ cat somesite.org.access_log | tail -3
10.12.11.254 - - [25/Jul/2014:15:51:16 +0700] "GET / HTTP/1.0" 200 5768 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://ift.tt/UZybIq)"
10.12.11.254 - - [25/Jul/2014:15:57:38 +0700] "GET / HTTP/1.0" 200 5768 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
10.12.11.254 - - [25/Jul/2014:19:19:25 +0700] "GET / HTTP/1.0" 200 5768 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0"
На сайте ничего нет, а у меня есть о посетителе более чем достаточно. Всё потому что «логи знают всё» ©.
Немного практики
Итак, решено — подставляем фейковый UA. Но как его сформировать? Я пошел по пути собирания с десятка UA каждого интересующего браузера, и написания регулярки для каждого, которая будет генерировать максимально правдоподобный и в то же время а какой-то мере уникальный отпечаток. Хотите пример? Вот вам 10 UA браузера «IE 9», и среди них пять настоящих. Сможете отличить?
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; chromeframe/12.0.742.112)
Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 6.0; Win64; x64; Trident/5.0; .NET CLR 3.8.50799; Media Center PC 6.0; .NET4.0E)
Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 8.1; Trident/5.0; .NET4.0E; en-AU)
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 8.0; WOW64; Trident/5.0; .NET CLR 2.7.40781; .NET4.0E; en-SG)
Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 8.0; Win64; x64; Trident/5.0; .NET4.0E; en)
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; Tablet PC 2.0; InfoPath.3; .NET4.0C; .NET4.0E)
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.0; Trident/5.0; .NET CLR 2.2.50767; Zune 4.2; .NET4.0E)
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0
Да, это возможно, но для это нужно анализировать. Анализировать, например, какие .net могут стоять на каких ОС, анализировать версии и сочетания, нюансы. Когда они теряются в куче — задача становиться мало тривиальной. Кому интересно как выглядят регулярки — добро пожаловать по этой ссылке. Дня генерации использовал randexp.js (за подсказку спасибо хабрачуваку под ником barkalov).
Вообще расширение успешно выдает себя за следующие браузеры:
- IE с 6 по 10;
- Chrome (Win / Mac / Linux);
- Firefox (Win / Mac / Linux);
- Safari (Win / Mac / Linux);
- Opera (Win / Mac / Linux);
- iPad и iPhone.
Что ещё интересного? Автоматизация. Отмечаешь галочками какие браузеры мы имитируем, ставишь галочку «Обновлять автоматически», указываешь интервал времени, и забываешь. Ничего лишнего. Для любопытных — посмотрите в консоли «фоновую страницу» — там всё не плохо залогировано.
Открытые исходники. Если есть желание допилить под себя, всё что необходимо, это:
- Открыть ссылку расширения на гитхабе;
- Нажать «Download Zip» или склонировать;
- На странице расширений поставить чекбокс «Режим разработчика»;
- Нажать «Загрузить распакованное расширение...» и указать путь к распакованному архиву или клону;
Буду очень признателен конструктивной критике и предложениям.
Лучше один раз увидеть: Google Webstore
Хорошие ссылки:
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий