为啥 Google +1 会记录我的鼠标移动? [关闭]

Posted

技术标签:

【中文标题】为啥 Google +1 会记录我的鼠标移动? [关闭]【英文标题】:Why does Google +1 record my mouse movements? [closed]为什么 Google +1 会记录我的鼠标移动? [关闭] 【发布时间】:2011-10-03 19:08:02 【问题描述】:

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

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

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

使用收集的信息

除上述用途外,您提供的信息 使用 to us 时遵守我们的主要 Google 隐私政策。

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

你的选择

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

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

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

更多信息

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

【问题讨论】:

Human like behavior?这是一个有趣的想法。我曾经看到一个类似的鼠标跟踪代码,它只是在全局变量中记录 X/Y 坐标。它们后来被用于在 jQuery 插件上启动/停止/取消自定义滚动。有一个比这个全局跟踪更好的实现(我最终改变了)。 @Mrchief,一些扑克客户使用鼠标移动来检测自动玩家,我在想也许谷歌可能会认为它是一种有效的防御措施,可以防止机器人建立个人资料并为大量网站 +1,但将其加权到他们的网站给他们不公平的竞争优势。谁知道呢。 想知道为什么 Facebook 不做类似的事情......(或者是吗?) 它可能用于某种 UI 测试。我知道谷歌喜欢做很多 a/b 测试,因此他们的41 shades of blue test 不久前。也许他们正在尝试跟踪用户在页面中的移动方式,以便提供更好的 UI。 你用的是什么工具? 【参考方案1】:

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

我通常对侵入性功能持愤世嫉俗的看法,但我认为这不会造成隐私风险。这令人震惊,因为它非常细粒度,但它不是很揭示。您的鼠标移动是否对银行详细信息进行编码?色情?

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

稍微跑题:

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

【讨论】:

用google+1脚本,出现在小游戏上,用鼠标控制……真的会很吵。 XD【参考方案2】:

如果您可以先加载脚本,则可以挂钩 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));

【讨论】:

好主意,但如果脚本设置了旧式 window.onmousemove(就像 Google 的脚本那样),这将不起作用。 如果是这样的话,on 也可以用同样的方式挂钩。 @Ben Alpert - 我在上面的答案中添加了一些 window.onmousemove 的代码。 功能码本身可以任意长。我们不想将多个 kb 转储到控制台中,所以我只选择了一些不会压倒日志窗口的较短限制。如果代码不足以识别它的位置,则可以增加数量,但如果长度没有上限,则在日志窗口中查看内容可能不切实际。【参考方案3】:

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

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

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

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

我的 2 美分。

【讨论】:

【参考方案4】:

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

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

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,顺便说一句,是一个以页面 cookie、位置、new Date().getTime()Math.random() 的 MD5 哈希开始的变量。

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

【讨论】:

很好的答案谢谢,知道为什么它需要一个随机数吗?我知道鼠标移动是生成随机数的好方法,但移动设备不会失败(他们没有鼠标) Math.random() 不是从当前时间戳播种的吗?如果是这样,使用像这样广泛部署的按钮,您可能会遇到很多冲突。可能会解释额外的努力。 @yahelc:This may help。简而言之,在 2008 年,大多数浏览器只播种一次,无论是在进程启动时还是第一次调用 Math.random() 时(在进程中或在窗口/选项卡中)。当然,从那以后情况可能会发生变化。 这似乎很奇怪——如果这是目的,他们不会只使用 window.crypto.getRandomValues: (function()var buf = new Uint8Array(1); window.crypto.getRandomValues (buf); 警报(buf[0]) )() 假设是为了提供更好的随机生成器种子,谷歌提供的种子就足够了,不是吗?或者至少只有一两个鼠标移动。目前的方式确实有点可疑。让 Google 在这里展示一些其他人未能提供的透明度会很好。【参考方案5】:

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

【讨论】:

也有一些不错的项目做的和this node.js app一模一样,比如 +1(原文如此)。很高兴知道人们在哪里点击以了解什么是有用的以及什么地方最适合投放广告。 好主意,但与主题无关;)【参考方案6】:

在截至 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))
    
();

它使用位移将 x 和 y 的总和乘以 2^16,然后添加一些其他维度并将所有这些乘以时间(以毫秒为单位 mod 1000000)。这绝对看起来像一个随机算法。

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

【讨论】:

【参考方案7】:

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

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

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

这真的很遥远,但无论如何……

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

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

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

【讨论】:

以上是关于为啥 Google +1 会记录我的鼠标移动? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将鼠标悬停在 Chrome 上时 CSS 图像会移动 [关闭]

为啥 MySql 会出现“子查询返回超过 1 行”错误?

为啥 Free Pascal 会自动将记录数据传递给 xmm 寄存器?

为啥设置了pageX和pageY创建的提示框不会随着鼠标移动

为啥我的电脑屏幕不显示鼠标箭头?

当用户输入除整数以外的任何内容时,为啥我的程序会无限循环输出? C++ [重复]