Разработчики объяснили, почему Chrome при запуске коннектится к трём случайным доменам

Майк Вест (Mike West) из группы Google Chrome в Мюнхене объясняет, почему при каждой загрузке браузер пытается установить соединение с тремя случайными доменами, вроде hxxp://aghepodlln/ или hxxp://lkhjasdnpr/. Он говорит, что видел в интернете несколько странных конспирологических теорий на этот счёт, поэтому считает разумным разъяснить ситуацию.

Истинная причиной таких запросов проста: быстро определить, находится ли клиент в сети, которая перехватывает и перенаправляет запросы к несуществующим хостам. Иногда бывает, что некоторые интернет-провайдеры перенаправляют запросы типа hxxp://text/ на что-то вроде hxxp://your.helpful.isp/search?q=text. Оставляя в стороне обсуждение, правильной или неправильной является такая «помощь» со стороны провайдера, но она вызывает проблемы у браузера Chrome. Конкретно, она мешает работе эвристических алгоритмов Omnibox, которые распознают поисковые запросы в строке ввода адреса.

Например, если ввести в адресной строке слово go, то Chrome выполнит поисковый запрос, но при этом в фоновом режиме отправит запрос HEAD на домен hxxp://go/. Если такой домен существует, то пользователю показывают информационную панель с вопросом, хочет ли он посетить данный сайт, и браузер запомнит этот ответ на будущее.

Очевидно, эта функция перестаёт работать нормально, если интернет-провайдер перехватывает такие запросы.

Поэтому Chrome и осуществляет проверку при запуске программы. Код браузера открыт, и поэтому можно посмотреть, как это реализовано в программе.

Модуль IntranetRedirectDetector при запуске программы создаёт новый объект IntranetRedirectorDetector. Он устанавливает короткую задержку (в данный момент 7 секунд), чтобы дать загрузиться всем важным модулям браузера, а затем срабатывает функция IntranetRedirectDetector::FinishSleep() и начинается реальная работа. Метод генерирует три случайных набора символов и отправляет асинхронные запросы HEAD к каждому из этих доменных имён, так что не выполняется запроса к кэшу и не сохраняются куки. После выполнения каждого из запросов вызывается функция IntranetRedirectDetector::OnURLFetchComplete() для записи результата. Если два из трёх запросов резолвятся на один и тот же хост, то этот хост сохраняется как сетевой "redirect origin". Всё просто.

Информация используется AlternateNavURLFetcher для определения, показывать ли пользователю информационную панель по каждому из запросов, которые обрабатывает Omnibox. Если запрос HEAD возвращает тот же сайт, что указан в "redirect origin", то он игнорируется. Если другой, то информационная панель может быть показана.

Представители Google ещё раз подчёркивают, что случайные запросы при загрузке браузера никуда не отправляют никакой приватной информации о пользователе и не используются для слежения. Эти запросы просто исправляют баг crbug.com/18942, и ничего больше.
+110
19 февраля 2012, 13:42
32
alizar 2236,6 G+

комментарии (75)

–38
Coolfly #
По мне так костыль какой то.
+38
RazoR_Empire #
Какое решение этой ситуации, по-вашему, будет не костыльно?
+206
n7off #
Убить всех человеков.
+5
OlexU #
Аватарка как раз подходит :)
+7
Old_Chroft #
Бендер против Кенни бессилен.
+25
homm #
Косталь — то что делают провайдеры, перенаправляя на поиск.
+2
jack128 #
вот это:
Он устанавливает короткую задержку (в данный момент 7 секунд), чтобы дать загрузиться всем важным модулям браузера,

костыль и есть.
0
Seldon #
Зачем писать много кода который бы выстраивал идеальную загрузку всех компонентов браузера, ради того чтобы равно по загрузке последнего послать 3 запроса. Простая задержка намного проще это раз а во вторых успеют или не успеют загрузится все компоненты абсолютно не важно для данной процедуры.
+1
jack128 #
а во вторых успеют или не успеют загрузится все компоненты абсолютно не важно для данной процедуры.
если это неважно, то зачем вообще нужна задержка?
+1
tovarisch #
Потому что их не волнуют 0,001% пользователей с возникшей ошибкой. Также как и потеря данных, устаревший кеш и прочие прелести. Сложно ожидать промышленной точности от разработчиков бесплатного массового сервиса.
0
Seldon #
Из текста я понял чтобы хром быстрее прогрузился, о том что все падает если запросы не в нужный момент шлются я не увидел информации.
+14
yuretsz #
Можно конечно, как некоторые другие разработчики, твердить, что это мол не их вина, что провайдеры используют редирект. А можно подумать о пользователе и решить проблему, хоть и костылем.
–1
Gorthauer87 #
А еще обязательно нужно послать лучи ненависти этому провайдеру.
+6
dimakey #
>… некоторые интернет-провайдеры перенаправляют запросы типа hxxp://text/ на что-то вроде hxxp://your.helpful.isp/search?q=text
>… она мешает работе эвристических алгоритмов Omnibox, которые…

перенаправляют запросы типа hxxp://text/ на что-то вроде hxxp://yourhelpfulgoogle.com/search?q=text

вот уж действительно

>… оставим в стороне обсуждение, правильной или неправильной является такая «помощь»
0
RReverser #
Зря человека минусуете, хорошую аналогию провел.
+22
DankoUA #
Ну вот, теперь конспирологам прийдется опять строить теории и смещать даты концов света.
+2
nikitosk #
>Поэтому Chrome и осуществляет проверку при запуске программы. Код браузера открыт, и поэтому можно >посмотреть, как это реализовано в программе.

Откуда же эти «странные конспирологические теории» если можно просто заглянуть в код?
+19
strangeman #
>Откуда же эти «странные конспирологические теории» если можно просто заглянуть в код?

Если бы так рассуждали все люди — мир бы был намного лучше.
+3
Sicness #
Наверное не в код непосредственно Chrome, так как, на сколько мне известно, он не open source.
0
Gendalph #
Chromium + propetiary_plugins = Chrome
Cromium = open source
propetiary_plugins = flash, pdf,…
–3
Sicness #
ИМХО, не факт ;)
0
Gendalph #
Факт или не факт — не докажешь.
Но обсуждаемый функционал есть и в Chromium (только что словил его wireshark'ом).
0
TheMengzor #
Эта же функция есть и в Chromium, это базовый небрендированный функционал.
+8
DobroeZlo #
Их придумывают те, у кого недостаточно скилла, чтобы «заглянуть в код».
+4
TheMengzor #
Откуда? Оттуда же, откуда и инопланетяне из принтера, посылающие таблицу менделеева, знаки солнца и скарабея чиканутой бабуле / www.youtube.com/watch?v=RirqnBUQTEU

Сто вопросов? Ответ один: журналюги :)
0
nikitosk #
Этот отрывок никогда не устану смотреть :))
0
NMellon #
Действительно, кто-то может предложить лучше решение? Предложите! И наверняка его будут использовать в новых версиях браузера. А ныть по этому поводу, да еще и в ситуации, когда код открыт — как-то не логично.
Вполне рабочее решение используется.
0
Source #
Как вариант можно проверять валидность домена, вместо того чтобы проверять его HEAD-запросом… Хотя это может обидеть любителей прописать невалидные домены в /etc/hosts для своих локальных сайтов :-)
0
HeadFore #
Зачем предлагать пользователю перейти на валидный, но несуществующий домен? Решение с HEAD запросом — самое здравое.
+1
Source #
Ну Chrome 17 вообще-то именно так и переходит, если домен валидный. Т.е. вы получите что-то типа «К сожалению, Google Chrome не может найти страницу djhgjfhjfhj.ru.», а не переход на www.google.ru/search?sourceid=chrome&ie=UTF-8&q=djhgjfhjfhj.ru
0
TheShock #
Плюс, сейчас такие времена, что начинают создавать домены первого уровня, а тут уже фиг проверишь
0
RReverser #
Это еще радуйтесь, что пробел и другие спецсимволы не разрешили (пока?) в доменных именах. А то с такими тенденциями все возможно…
+8
gvsmirnov #
Он устанавливает короткую задержку (в данный момент 7 секунд), чтобы дать загрузиться всем важным модулям браузера

:facepalm:
–2
ngreduce #
в чем проблема?
+10
Evengard #
А если за 7 секунд «все важные модули» не загрузятся?
–2
ngreduce #
Доступ в сеть загрузится. А от кеша данный хак не зависит. Вполне рабочее решение.
+17
gvsmirnov #
Это отвратительный грязный хак, порождающий race condition. Никакой гарантии по поводу того, что именно за семь секунд на любой машине «доступ в сеть загрузится», в принципе не может быть.
–3
ngreduce #
Без пруфа в исходном коде хромиума ваше заявление, как и мое выглядят гаданием по кофейной гуще.

Я полностью согласен с вами что в общем, это не решение проблемы. Но в данном частном случае оно является вполне приемлемым.
0
gvsmirnov #
Пруфа чего?
–5
ngreduce #
Того, что существует возможность race condition.

Я не знаю кем вы работаете в Яндексе, но если как-либо связаны с ИТ, то должны понимать, что гарантировать что-либо на 100%, тем более на клиенте невозможно.
+1
Evengard #
Скорее уж нельзя гарантировать, что что-то загрузится за 7 секунд. Вообще, что за магическая цифра — 7 секунд? Почему 7? И почему именно за 7 секунд все эти модули обязаны загрузиться? Что будет, если они таки не загрузятся?
+1
ngreduce #
Хост не сохранится как redirect origin. Омнибар будет работать как буд-то этого кода и не было.
+4
Source #
Да дело тут даже не в том будет работать омнибар или нет, а в том что это вообще очень спорный подход для определения события «загружены все важные модули». От Google было бы логичнее ожидать более качественного решения, чем использование magick timeout, хотя бы с callback на нужном событии.
+1
ngreduce #
Ну это же Ализар, поэтому я и говорил что нужен пруф. Но мне мой уровень не позволит за пару десятков минут разобраться в архитектуре Chromium.

К слову, в Chromium есть много более важных задач. Поэтому в какой-то мере это показывает что в Google не страдают синдромом идеального кода.
0
gvsmirnov #
То, что разработчик, сделавший какой-либо модуль, принял какое-либо решение, ничего не говорит о компании Google. Не забывайте, что проект open source, и это мог вообще быть сторонний человек.

Разобраться за пару десятков минут никто не сможет, потому что репозиторий весит больше гигабайта, и клонируется (то есть, sync'ается в терминах gclient) очень долго :)
0
ngreduce #
Про всех я говорить не могу.
0
RReverser #
Действительно. 42 же надо было.
+3
gvsmirnov #
Race condition есть, поскольку в качестве механизма синхронизации используется ожидание фиксированной длительности, что никак не гарантирует того, что необходимые действия в другом потоке успеют выполниться.

То, что в данном конкретном случае вероятность того, что это race condition приведёт к проблеме, крайне малаTM, никак не отменяет его существования.

Какая разница, где я работаю?
–1
ngreduce #
Ваше место работы я привел лишь потому, что обычно свое мнение человек строит в первую очередь, по собственному опыту. И если вы таки занимались довольно серьезными задачами, а не быдлокодерством на Жумле и прочем (не хочу этим никого обидеть), то ваша позиция более-менее ясна.
+1
SVlad #
По хорошему, этот модуль должен запускаться по событию типа «сетевые модули загружены». Но из текста статьи непонятно, там используется просто таймер, или же имелось в виду, что сетевые модули запускаются в среднем 7 секунд.
0
Klaster #
Как то интересно, код открыт, проблема естьбыла, посмотреть в сам код некому?
–1
Amper #
Код не открыт
0
Klaster #
промахнулся ответил ниже, как же цитата из поста?
Поэтому Chrome и осуществляет проверку при запуске программы. Код браузера открыт, и поэтому можно посмотреть, как это реализовано в программе.
0
Amper #
Не знаю, почему так написано в статье, но в ней говорится о Chrome, код которого закрыт, а открыт код Chromium.
0
Gendalph #
Прошу прощения за некоторое хамство, но lmgtfy.com/?q=google+chrome+source&l=1
0
Amper #
Ничего, что ваша ссылка приводит на код chromium, а не chrome?
+1
Gendalph #
А ничего, что Chrome отличается от Cromium'a только наличием не open-source плагинов (flash+pdf)?
0
Amper #
Вы уверены?
+4
Gendalph #
Я цитирую заявления разработчиков. И не исключаю, что в Chrome может быть что-то, чего нету в Chromium, помимо заявленного.
Что касается статьи — обсуждаемый функционал есть и в Chromium.
–1
rengel_system #
Если вы не уверенны то сделайте ревер-инжиниринг, напишите статью на хабр.
0
mejedi #
Интересно, какое решение будет следующим, когда провайдеры начнут бороться с текущим методом, который использует хром? Судя по описанию, им достаточно ресолвить несуществующие домены не в один и тот-же айпишник, а в разные.
0
iambot #
А зачем провайдерам бороться с этим?
Этот функционал нужен только для правильной работы омнибокса — тулзы, которая определяет поисковой запрос был введен в адресную строку или url или навигационный запрос или еще что-то.
0
mejedi #
Затем же, зачем они делают hxxp://your.helpful.isp/search?q=text.
0
iambot #
А как вы думаете, зачем они это делают и при чем здесь работа омнибокса?
0
mejedi #
Есть единое поле ввода, куда можно ввести адрес сайта или запрос. Есть пограничные случаи, когда введенное можно интерпретировать и так и так (sitename–>http://sitename.com). Если sitename существует, мы попадаем на него, иначе у нас открывается гугл. Правильно?

Например, если мы контролируем DNS сервер, которым пользуется клиент, и ресолвим несуществующие домены, мы можем перенаправить часть трафика на свою страницу и показывать банер.
0
iambot #
Хм. И действительно, я об этом не подумал.

Я почему-то думал только про случаи, когда первый запрос, либо все запросы при неоплаченном интернете редиректятся.
–1
Klaster #
Поэтому Chrome и осуществляет проверку при запуске программы. Код браузера открыт, и поэтому можно посмотреть, как это реализовано в программе.
+2
Colobock #
Как в Хроме выключить функцию, бросающую в поиск гугла при наборе внутренних адресов с локальным доменом?
+2
kraleksandr #
Ставить / после локального домена?
0
RReverser #
При всем уважении к разработчикам Хрома — неужели было так трудно при попытке перехода пытаться резолвить и локальные домены?
0
leviathan #
Как вариант, вводить домены с http://, тогда не перенаправляет. Да и после одного перехода он запоминает, что это домен, и в следующий раз дает ввести как и любой другой адрес.
0
vmysla #
не знаю почему у вас проблемма,
должно работать и без слеша.
скорее-всего виноват ваш внутренний DNS сервер или конфигурация сети (VPN?)
+4
fishbone #
А еще такой интересный баг. Если у провайдера включена переадресация (не заплатил за интернет), то при наведении(!) мышки на звездочку хром падает. Это оно?

А вообще похоже на заговор. Хром проверяет, не захватил ли еще Google весь Интернет.
0
cdev #
Ага — пользуется ли пользователь гугло-днсом :))
0
glewar #
Представители Google ещё раз подчёркивают, что случайные запросы при загрузке браузера никуда не отправляют никакой приватной информации о пользователе и не используются для слежения.

Угу, для слежения используются другие запросы к другим доменам :)

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