195

这仅在我的网站上带有 Google +1 框的页面上:

在此处输入图像描述

它似乎在每次鼠标移动时都会触发一个事件。有谁知道它在做什么?我在谷歌上搜索(也许我应该在这个上尝试一次 Bing!)但似乎没有人写过它。它是否记录了有关我的访问者浏览习惯的信息?是某种 CAPTCHA 来检测人类的行为吗?

示例 URL,在 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

对于它的价值(我可以看到这将成为一个受欢迎的问题),我认为它背后没有任何险恶的东西,它甚至可能是一个无用的工件/错误,但如果它正在做某种跟踪,好吧,这对我来说似乎有点欺骗性。

谷歌 +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 按钮时您正在查看的页面的相关信息。您的 +1 可能会在 Google 服务(例如搜索结果或您的 Google 个人资料中)或网站上的其他位置和互联网上的广告中显示为您的个人资料名称和照片的注释。

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

为了使用 Google +1 按钮,您需要有一个公开的 Google 个人资料,对全世界可见,其中至少包括您为个人资料选择的名称。该名称将在所有 Google 服务中使用,并且在某些情况下,它可能会替换您在通过您的 Google 帐户共享内容时使用的另一个名称。我们可能会向知道您的电子邮件地址或其他身份信息的人显示您的 Google 个人资料身份。

使用收集的信息

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

我们可能会与公众、我们的用户和合作伙伴(例如发布商、广告商或关联网站)共享与用户 +1 活动相关的汇总统计数据。例如,我们可能会告诉发布商“为此页面 +1 的人中有 10% 在华盛顿州的塔科马。”</p>

您的选择

您可以在个人资料的 +1 选项卡上查看您已 +1 的项目列表。您可以从该列表中删除单个项目。

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

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

更多信息

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

4

9 回答 9

122

它似乎是用你的鼠标移动来播种一个随机数生成器。

鼠标移动处理程序本身执行以下操作:

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));

hash, 顺便说一句, 是一个变量,它以页面 cookie、位置、new Date().getTime()和的 MD5 哈希开始Math.random()

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

于 2011-07-18T17:01:17.610 回答
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/

于 2011-07-24T05:46:13.347 回答
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));
}
于 2011-07-12T16:59:29.657 回答
17

在截至 7 月 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,然后添加一些其他维度并将所有这些乘以时间(以毫秒为单位 mod 1000000)。这绝对看起来像一个随机化算法。

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

于 2011-07-23T02:18:18.813 回答
4

我敢打赌它的“页内分析”测试版。制作光标并单击热图。

于 2011-07-21T06:38:19.163 回答
2

我认为来自 CHI 2010 的 Guo 和 Agichtein 的论文http://www.mathcs.emory.edu/~qguo3/wip287-guo11.pdf可以提供更多关于 Google 为何这样做的想法。

显然,鼠标移动是眼球运动的粗略代理,可以让人们近似眼球追踪结果。

于 2011-07-24T03:04:46.460 回答
1

他们可能使用它来衡量用户从一个 UI 项目移动到另一个 UI 项目的速度、点击失败的频率等。

我通常对侵入性功能持愤世嫉俗的看法,但我不认为这是隐私风险。这令人震惊,因为它是如此异常细粒度,但它并不是很有启发性。您的鼠标移动是否对银行详细信息进行编码?A片?

谷歌等有大量高质量的数据来跟踪你。鼠标坐标的应用非常有限。

稍微跑题:

在某种程度上,你收集的关于人们的数据越多,你遇到的问题就越多。我(从 Schneier 等人那里)听说情报机构正遭受由他们不断加速的数据采集引发的大量误报的困扰——信噪比非常糟糕。我觉得这有点有趣。

于 2011-07-12T16:25:42.017 回答
1

无法确定 Google 对这些鼠标移动数据做了什么。如您所见,它不会将大量信息返回到服务器,因此无需担心。

第一个可能是通用事件处理程序。我认为的原因是,如果您阅读源代码,您可以在 throw Error("Invalid listener argument"); 之前看到这一行。下一个或下一个后一个抛出错误(“无效事件类型”)。由于触发的行位于这两个(与事件相关的)异常之间,我很确定它是某种事件处理程序。使用调试器,它并没有真正做任何事情(不会跳转到其他函数),所以它似乎是为将来的实现而存在的。

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

第三个似乎是内容更新程序或类似的东西,因为您可以看到诸如 cacheTimeout 之类的字符串散布在它周围。

我的 2 美分。

于 2011-07-18T15:54:18.813 回答
1

这真的太牵强了,但无论如何……

它围绕鼠标从起点到不同吸引子的轨迹类型和曲率移动,即页面上的 2 个项目/链接。

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

简而言之,如果您放置两个相互竞争的链接/按钮并分析指向其中一个链接的轨迹,您可以推断出一种模式或您如何决定仅单击其中一个链接(参见 13:00 左右的视频)

于 2011-07-24T22:35:37.160 回答