为什么Google +1会记录我的鼠标动作?

时间:2011-07-12 16:17:59

标签: javascript privacy mousemove google-plus-one data-protection

这仅适用于我网站上包含Google +1信箱的网页:

enter image description here

似乎每次鼠标移动都会触发一个事件。有谁知道它在做什么?我在Google上搜索过(也许我应该在这个上尝试过Bing一次!)但似乎没有人写过这篇文章。它是否记录了我的访客浏览习惯的信息?是否有某种类型的CAPTCHA来检测像人类一样的人类?

示例网址,在Chrome中按F12,转到时间轴并按下记录,然后在此页面上移动鼠标(加上这个问题,请不要担心):

https://plusone.google.com/u/0/_/+1/button?hl=en-US&jsh=r%3Bgc%2F22224365-adc8a19e#url=https://stackoverflow.com/questions/6667544/google-1-recording-mouse-move&size=tall&count=true&id=I1_1310488711647&parent=https://plusone.google.com/u/0/_/+1/button?hl=en-US&jsh=r%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按钮隐私权政策

     

2011年6月28日

     

Google隐私政策介绍了我们如何处理个人信息   当您使用Google的产品和服务时,包括信息   当您使用Google +1按钮时提供。另外,以下内容   描述了我们针对您使用的特定隐私做法   +1按钮。

     

我们收集的信息及其分享方式

     

Google +1按钮是您公开分享信息的一种方式   与世界。 Google +1按钮可帮助您和其他人接收   来自Google和我们合作伙伴的个性化内容事实上你   Google会记录一些内容,以及您点击+1按钮时所查看页面的相关信息。   您的+ 1可能会在其他人看来是您的个人资料名称的注释   和Google服务中的照片(例如在搜索结果中或在您的   Google个人资料)或其他网站和互联网上的广告。

     

我们会记录有关您的+1活动的信息,以便提供   您和其他有更好Google服务体验的用户。

     

要使用Google +1按钮,您需要拥有一个公开Goog​​le   配置文件对世界可见,至少包括您的名称   选择了个人资料。该名称将用于Google服务   在某些情况下,它可能会替换您在共享时使用的另一个名称   您的Google帐户下的内容。我们可能会显示您的Google个人资料   具有您的电子邮件地址或其他身份识别的人的身份   信息。

     

使用收集的信息

     

除上述用途外,还提供您提供的信息   根据我们的主要Google隐私权政策使用我们。

     

我们可能会分享与用户的+1活动相关的汇总统计信息   公众,我们的用户和合作伙伴,例如发布商,广告客户,   或连接的网站。例如,我们可能会告诉出版商“10%的   给这个页面+1的人在华盛顿州的塔科马。“

     

您的选择

     

您可以在自己的+1标签上查看自己拥有的项目列表+ 1   轮廓。您可以从该列表中删除单个项目。

     

您可以选择不在第三方网站上看到+1推荐   (包括第三方网站上的广告)来自您认识的人。

     

我们会在您的浏览器中本地存储数据(例如您最近的+1)。   您可以在浏览器中访问和清除此信息   设置。

     

更多信息

     

Google坚持美国安全港隐私权原则。更多   有关安全港框架或我们的注册的信息,请参阅   商务部网站。

9 个答案:

答案 0 :(得分: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) * 1000000c是一个以1开头的变量。

所有这些都包含在匿名函数的范围内,匿名函数本身会立即被评估以返回分配给名为“random”的属性的函数。返回的函数看起来像这样:

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

hash,BTW,是一个变量,以页面的Cookie,位置,new Date().getTime()Math.random()的MD5哈希值开头。

(请注意,Google当然可以随时更改返回的脚本,从而使此分析无效)

答案 1 :(得分:48)

正在执行的实际代码来自此处的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/

答案 2 :(得分: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));
}

答案 3 :(得分:17)

在截至7月22日的uncluttered code中,您会注意到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))
    }
}();

使用bitshift将x和y之和乘以2 ^ 16,然后添加一些其他维度并将所有这些乘以时间乘以毫秒mod 1000000.这绝对看起来像一个随机算法。

我不确定为什么页面会需要这样的东西,也许它正在使用cookie,阻止自动+1点击?当您点击“+1”时,弹出的登录屏幕似乎附加了一个随机数作为哈希,网址以“&amp; hl = en-US#RANDOMNUMBER”结尾

答案 4 :(得分:4)

我打赌你的“In-Page Analytics”测试版。制作光标并单击热图。

答案 5 :(得分:2)

我认为来自CHI 2010 http://www.mathcs.emory.edu/~qguo3/wip287-guo11.pdf的郭和Agichtein的论文可以提供有关谷歌为何这样做的进一步想法。

显然,鼠标移动是眼球运动的粗略代表,并且允许人们近似眼动追踪结果。

答案 6 :(得分:1)

他们可能会用它来衡量用户从一个UI项目移动到另一个UI项目的速度,点击次数的频率等等。

我通常对侵入性功能有一种深刻的愤世嫉俗的观点,但我不认为这是一种隐私风险。这很令人震惊,因为它非常精细,但它不是非常揭示。您的鼠标移动是否对银行详细信息进色情?

Google等都有大量高质量的数据可供您跟踪。鼠标坐标的应用非常有限。

稍微偏离主题:

在某种程度上,您收集的有关人员的数据越多,您遇到的问题就越多。我听到(来自Schneier等)情报机构正在遭受由于他们不断加速的数据采集引发的大量误报 - 信噪比非常糟糕。我发现这有点有趣。

答案 7 :(得分:1)

无法确定谷歌对这款鼠标移动数据做了什么。正如您所看到的那样,它不会将负载和大量信息返回给服务器,因此无需担心。

第一个可能是通用事件处理程序。我之所以认为这是因为如果你阅读了源代码,你可以看到在抛出错误之前就行了(“无效的监听器参数”);和下一个或下一个之后的抛出错误(“无效的事件类型”)。由于被触发的行位于这两个(事件相关的)异常之间,我很确定它是某种事件处理程序。使用调试器,它实际上没有做任何事情(不跳转到其他一些函数)所以它似乎是为了将来的实现。

第二个功能与第一个功能相同。因为它是gTalk,我想它会更新你的状态(离开,在线等)。

第三个似乎是内容更新程序或类似内容,因为你可以看到分散在其周围的字符串,如cacheTimeout等。

我的2美分。

答案 8 :(得分:1)

这真的是远远不够,但无论如何它仍然存在......

它围绕着轨迹的类型和从起始点朝向不同吸引子的鼠标移动的曲率取得页面上的2个项目/链接。

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

简而言之,如果您放置两个竞争链接/按钮并分析其中一个链接的轨迹,您可以推断出模式如何您已达到决定,仅点击其中一条链接(请参阅13:00左右的视频)