Почему Google +1 записывает мои движения мыши? [закрыто]

196

Это только на страницах с окном Google +1 на моем сайте:

введите описание изображения здесь

Кажется, что оно срабатывает при каждом движении мыши. Кто-нибудь знает, что он делает? Я искал в Google (возможно, я должен попробовать Bing на этот раз!), Но никто, кажется, не написал об этом. Записывает ли она информацию о моих посетителях? Это какая-то капча, чтобы обнаружить человека как бевиор?

Пример URL, нажмите F12 в Chrome, перейдите на временную шкалу и нажмите запись, затем наведите курсор мыши на эту страницу (плюс к этому вопросу, не волнуйтесь):

https://plusone.google.com/u/0/_/+1/button?hl=en-US&jsh=r%3Bgc%2F22224365-adc8a19e#url=/programming/6667544/google -1-записи-мышь-ход & размер = высокий & кол = истина & ID = I1_1310488711647 & родитель = HTTPS:? //plusone.google.com/u/0/_/+1/button гл = EN-US & JSH = г% 3Bgc% 2F22224365-adc8a19e # URL = https: //stackoverflow.com/questions/6667544/google-1-recording-mouse-move&size=tall&count=true&id=I1_1310488711647

Что бы это ни стоило (я вижу, что это будет популярный вопрос), я не думаю, что за этим стоит что-то зловещее, это может быть даже бесполезный артефакт / ошибка, но если он делает какое-то отслеживание, ну, это кажется немного обманчивым для меня.

Политика конфиденциальности Google +1

http://www.google.com/intl/en/privacy/plusone/

Политика конфиденциальности Google +1 Button

28 июня 2011 г.

Политика конфиденциальности Google описывает, как мы обрабатываем личную информацию при использовании продуктов и услуг Google, включая информацию, предоставляемую при использовании кнопки Google +1. Кроме того, ниже описаны наши дополнительные правила конфиденциальности, характерные для использования вами кнопки +1.

Информация, которую мы собираем и как она распространяется

Кнопка Google +1 позволяет вам публично делиться информацией со всем миром. Кнопка Google +1 помогает вам и другим получать персонализированный контент от Google и наших партнеров. Тот факт, что вы добавили +1, будет записан Google вместе с информацией о странице, которую вы просматривали, когда нажимали кнопку +1. Ваши +1 могут отображаться для других в виде аннотации с именем вашего профиля и фотографией в службах Google (например, в результатах поиска или в вашем профиле Google) или в других местах на веб-сайтах и ​​в объявлениях в Интернете.

Мы запишем информацию о вашей активности +1, чтобы предоставить вам и другим пользователям более удобное использование служб Google.

Чтобы использовать кнопку Google +1, вам нужен общедоступный профиль Google, видимый всему миру, который должен включать как минимум имя, которое вы выбрали для профиля. Это имя будет использоваться во всех службах Google, и в некоторых случаях оно может заменить другое имя, которое вы использовали при публикации контента в своей учетной записи Google. Мы можем отображать вашу личность в профиле Google людям, у которых есть ваш адрес электронной почты или другая идентифицирующая информация.

Использование собранной информации

В дополнение к вышеописанному использованию информация, которую вы предоставляете нам, используется в соответствии с нашей основной политикой конфиденциальности Google.

Мы можем делиться общей статистикой, связанной с активностью пользователей +1, с общественностью, нашими пользователями и партнерами, такими как издатели, рекламодатели или связанные сайты. Например, мы можем сообщить издателю, что «10% людей, которые добавили +1 на эту страницу, находятся в Такоме, штат Вашингтон».

Ваш выбор

Вы можете просмотреть список элементов, которые у вас есть + 1, на вкладке +1 в вашем профиле. Вы можете удалить отдельные элементы из этого списка.

Вы можете отказаться от просмотра +1 рекомендаций на сторонних веб-сайтах (включая объявления на сторонних сайтах) от знакомых вам людей.

Мы будем хранить данные (например, ваши последние +1) локально в вашем браузере. Вы можете получить доступ к этой информации и очистить ее в настройках своего браузера.

Больше информации

Google придерживается принципов конфиденциальности США Safe Harbor. Для получения дополнительной информации о платформе Safe Harbor или нашей регистрации, посетите веб-сайт Министерства торговли.

Том Гуллен
источник
3
Human like behavior? Это интересная мысль. Однажды я видел похожий код отслеживания мыши, который просто записывал координаты X / Y в глобальных переменных. Позже они использовались для запуска / остановки / отмены пользовательской прокрутки в плагине jQuery. Была лучшая реализация, чем эта глобальная вещь отслеживания (которую я изменил в конце концов).
Mrchief
7
@Mrchief, некоторые покерные клиенты используют движения мыши для обнаружения автоматических игроков, я подумал, что, возможно, Google посчитает это эффективной защитой от ботов, создающих профили и + 1 множество сайтов, но при этом взвешивая их по отношению к своим сайтам, давая им несправедливое конкурентное преимущество. Кто знает, хотя.
Том Гуллен
1
Интересно, почему Facebook не делает ничего подобного ... (или делает это?)
Mrchief
7
Это может быть для какого-то тестирования пользовательского интерфейса. Я знаю, что Google любит проводить много тестов a / b, отсюда и их 41 тест на синий цвет . Возможно, они пытаются отследить, как пользователь перемещается по странице, чтобы обеспечить лучший пользовательский интерфейс.
Грег Гида,
Какой инструмент вы используете?
Сид

Ответы:

123

Похоже, что вы заполняете генератор случайных чисел вашими движениями мыши.

Сам обработчик перемещения мыши делает что-то вроде следующего:

var b = ((event.X << 16) + event.Y) * (new Date().getTime() % 1000000);
c = c * b % d;
if (previousMouseMoveHandler) previousMouseMoveHandler.call(arguments);

dесть (screen.width * screen.width + screen.height) * 1000000, и cэто переменная, которая начинается с 1.

Все это входит в область действия анонимной функции, которая сама по себе немедленно оценивается, чтобы вернуть функцию, которая назначена свойству с именем "random". Эта возвращаемая функция выглядит примерно так:

var b = c;
b += parseInt(hash.substr(0,20), 16);
hash = MD5(hash);
return b / (d + Math.pow(16, 20));

hashBTW - это переменная, которая начинается как MD5-хэш файлов cookie, местоположения new Date().getTime(), и Math.random().

(Обратите внимание, конечно, что Google может изменить скрипт, возвращенный в любое время, и, следовательно, аннулировать этот анализ)

аномия
источник
4
Отличный ответ, спасибо, есть идеи, зачем нужно случайное число? Я понимаю, что движения мыши - это довольно хороший способ генерации случайного числа, но это не сработает с мобильными устройствами (у них нет мыши)
Том Гуллен,
27
Не Math.random()отобранный из текущей отметки времени? Если это так, с широко развернутой кнопкой, подобной этой, вы ожидаете много коллизий. Могу объяснить дополнительные усилия.
Yahel
7
@yahelc: Это может помочь . Короче говоря, в 2008 году большинство браузеров посеяли время только один раз, либо при запуске процесса, либо при первом вызове Math.random () (в процессе или в окне / вкладке). Конечно, с тех пор все могло измениться.
Аномия
3
Это кажется странным - если бы это было целью, они не использовали бы только window.crypto.getRandomValues: (function () {var buf = new Uint8Array (1); window.crypto.getRandomValues ​​(buf); alert (buf [ 0])}) ()
Рич Брэдшоу
3
Предположим, что это должно было дать лучший генератор случайных чисел, семени, предоставленной Google, будет достаточно, нет? Или, по крайней мере, один или два движения мыши. Нынешний способ кажется немного подозрительным. Было бы неплохо, чтобы Google продемонстрировал некоторую прозрачность здесь, где другие не смогли это сделать.
Wernight
47

Фактический код, который выполняется, получен из кода Shindig, найденного здесь:

http://svn.apache.org/repos/asf/shindig/trunk/features/src/main/javascript/features/shindig.random/random.js

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

Вот статья, которая объясняет, почему использование Math.random () плохо:

http://baagoe.com/en/RandomMusings/javascript/

Пол Линднер
источник
32

Если вы можете сначала загрузить свой скрипт, вы можете подключить addEventListener и регистрировать всех, кто устанавливает addEventListener, и видеть, кто это делает, а затем, просматривая соответствующий код, посмотреть, что они делают.

Поместите это на место до загрузки кода Google:

var oldListener = document.addEventListener;
document.addEventListener = function(type, listener, capture) {
    if (type == "mousedown" || type == "mouseup" || type == "mousemove") {
        console.log("type=" + type + " listener=" + listener.toString().slice(0, 80));
    }
    return (oldListener.apply(this, arguments));
}

Чтобы увидеть, что слушает window.onmousemove, вам придется сделать это позже, потому что это просто присваивание переменной, а не функция, которую вы можете перехватить. Поэтому иногда после запуска кода инициализации страницы вы можете сделать это, чтобы записать, что к нему подключено:

if (window.onmousemove) {
    console.log(window.onmousemove.toString().slice(0,80));
}
jfriend00
источник
2
Хорошая идея, но это не сработает, если window.onmousemoveвместо этого скрипт задает старый стиль (как это делает скрипт Google).
Аномия
Если бы это было так, вы можете подключить это тоже самое.
Jfriend00
@Ben Alpert - я добавил код для window.onmousemove в мой ответ выше.
Jfriend00
Сам код функции может быть произвольно длинным. Мы не хотим помещать в консоль несколько килобайт, поэтому я выбрал более короткий предел, который не будет перегружать окно журнала. Если этого кода недостаточно, чтобы можно было определить, где он находится, число может быть увеличено, но может быть нецелесообразно просматривать вещи в окне журнала, если не было верхней границы длины.
jfriend00
17

В незагроможденном коде от 22 июля вы заметите, что onmousemove является частью класса Gb.random:

Gb.random = function () {
    function a(a) {
        var b = Jb();
        b.update(a);
        return b.ib()
    }
    var b = la.random(),
        c = 1,
        d = (screen[za] * screen[za] + screen[J]) * 1E6,
        e = i.onmousemove || Db();
    i.onmousemove = function (a) {
        if (i.event) a = i.event;
        var b = a.screenX + a.clientX << 16;
        b += a.screenY + a.clientY;
        b *= (new Date)[Ta]() % 1E6;
        c = c * b % d;
        return e[G](i, ka[x][Aa][G](arguments))
    };
    var f = a(k.cookie + "|" + k[B] + "|" + (new Date)[Ta]() + "|" + b);
    return function () {
        var b = c;
        b += ia(f[cb](0, 20), 16);
        f = a(f);
        return b / (d + la.pow(16, 20))
    }
}();

Это умножение суммы x и y на 2 ^ 16 с использованием битового сдвига, затем добавление некоторых других измерений и умножение всего этого на время в моде 1000000 миллисекунд. Это определенно похоже на алгоритм рандомизации.

Я не уверен, зачем странице нужно что-то подобное, возможно, она использует cookie, предотвращая автоматическое нажатие +1? Когда вы нажимаете «+1», на экране входа в систему появляется случайное число, добавляемое в качестве хэша, URL-адрес заканчивается на «& hl = en-US # RANDOMNUMBER».

NoBugs
источник
4

Бьюсь об заклад, его бета "In-Page Analytics". Делаем курсор и жмем тепловую карту.

Fresheyeball
источник
Есть также несколько хороших проектов , которые делают одно и то же это Node.js приложения , к примеру
Пьер Паоло Рамон
+1 (так). Хорошо знать, где люди нажимают, чтобы узнать, что полезно, и какое место лучше всего подходит для рекламы.
Rds
Хорошая идея, но не имеет ничего общего с предметом;)
naugtur
2

Я думаю, что статья Го и Агиштайна из CHI 2010 http://www.mathcs.emory.edu/~qguo3/wip287-guo11.pdf может дать дополнительные идеи о том, почему Google это делает.

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

Панос Ипейротис
источник
1

Вероятно, они используют его для измерения того, как быстро пользователи переходят от одного элемента пользовательского интерфейса к другому, как часто пропускаются клики и т. Д.

Обычно я глубоко цинично отношусь к инвазивным функциям, но не думаю, что это риск для конфиденциальности. Это шокирует, потому что это необычайно мелкозернистое, но не очень показательное . Ваше движение мыши кодирует банковские реквизиты? Порно?

Google и т. П. Имеют много высококачественных данных для отслеживания вас. Координаты мыши имеют очень ограниченное применение.

Чтобы немного выйти за рамки темы:

В какой-то степени, чем больше данных вы собираете о людях, тем больше у вас проблем. Я слышал (от Шнайера и тому подобное), что спецслужбы страдают от огромного количества ложных срабатываний, вызванных их все более ускоряющимся сбором данных - отношение сигнал / шум ужасно. Я нахожу это несколько забавным.

spraff
источник
Со скриптами Google +1, появляющимися в мини-играх, которые используют мышь для элементов управления ... Там действительно будет много шума. XD
PicoCreator
1

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

Первый - это, вероятно, универсальный обработчик событий. Причина, по которой я думаю, заключается в том, что если вы читаете источник, вы можете увидеть это в строке перед тем, как будет выброшено Error («Недопустимый аргумент слушателя»); и следующий или один за другим появляется ошибка throw («Недопустимый тип события»). Поскольку между этими двумя (связанными с событием) исключениями находится стреляющая строка, я уверен, что это своего рода обработчик событий. Используя отладчик, он на самом деле ничего не делает (не переключается на какую-то другую функцию), поэтому кажется, что он существует для будущей реализации.

Вторая функция идентична первой. Так как это gTalk, я полагаю, он обновляет ваш статус (нет, онлайн и т. Д.).

Третий, похоже, обновляет контент или что-то подобное, так как вокруг него можно увидеть строки типа cacheTimeout и т. Д.

Мои 2 цента.

zatatatata
источник
1

это действительно далеко от надуманного, но здесь это идет так или иначе ...

он вращается вокруг типа траектории и кривизны движения мыши от начальной точки к различным аттракторам, т. е. 2 элемента / ссылки на странице.

http://sciencestage.com/v/26698/dynamics-and-embodiment-in-language-comprehension.html

Короче говоря, если вы поместите две конкурирующие ссылки / кнопки и проанализируете траекторию движения к одной из этих ссылок, вы можете определить шаблон или то, как вы пришли к решению щелкнуть только по одной из этих ссылок (см. видео около 13:00).

утонский автоматический
источник