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

Tom*_*len 197 javascript privacy data-protection mousemove google-plus-one

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

在此输入图像描述

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

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

https://plusone.google.com/u/0/_/+1/button?hl=en-US&jsh=r%3Bgc%2F22224365-adc8a19e#url=/sf/ask/466728111/ -1录音的鼠标移动和大小=身高&计数=真&ID = I1_1310488711647与父= 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按钮时所查看的页面的相关信息.您的+ 1可能会在其他人看来是在Google服务中使用您的个人资料名称和照片(例如搜索结果或Google个人资料)或互联网上的网站和广告上的其他地方.

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

要使用Google +1按钮,您需要向全世界展示公开的Google个人资料,其中至少包含您为个人资料选择的名称.该名称将在Google服务中使用,在某些情况下,它可能会替换您在Google帐户下共享内容时使用的其他名称.我们可能会向拥有您的电子邮件地址或其他识别信息的人显示您的Google个人资料身份.

使用收集的信息

除上述用途外,您提供给我们的信息均受我们Google隐私政策的约束.

我们可能会与公众,我们的用户和合作伙伴(如发布商,广告客户或关联网站)共享与用户+1活动相关的汇总统计信息.例如,我们可能会告诉发布商"在本页面上为此页面添加1%的人中有10%位于华盛顿州塔科马市."

你的选择

您可以在个人资料的+1标签上查看自己拥有的项目列表+ 1.您可以从该列表中删除单个项目.

您可以选择不从您认识的人那里看到第三方网站上的+1推荐(包括第三方网站上的广告).

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

更多信息

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

Ano*_*mie 123

它似乎是用鼠标移动播种随机数生成器.

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

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

dis (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));
Run Code Online (Sandbox Code Playgroud)

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

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

  • 不是`Math.random()`从当前时间戳播种?如果是这样,使用像这样广泛部署的按钮,你会发现很多碰撞.可能会解释额外的努力. (27认同)
  • @yahelc:[这可能会有所帮助](http://stackoverflow.com/questions/1062902/how-random-is-javascripts-math-random/4415496#4415496).简而言之,在2008年,大多数浏览器只用一次播种,无论是在进程开始时还是第一次调用Math.random()(在进程中或在窗口/选项卡中).当然,事情可能已经发生了变化. (7认同)
  • 很好的答案谢谢,任何想法为什么它需要一个随机数?我理解鼠标移动是生成随机数的一种非常好的方法,但是这不会因为移动设备而失败(它们没有鼠标) (4认同)
  • 这似乎不可思议,但 - 如果这是目的,不会,他们只是用window.crypto.getRandomValues:(函数(){VAR BUF =新Uint8Array(1); window.crypto.getRandomValues(BUF);警报(BUF [ 0])})() (3认同)
  • 假设它是为了提供更好的随机生成器种子,谷歌提供的种子就够​​了,不是吗?或者至少只有一两个鼠标移动.目前的方式确实有点可疑.如果谷歌在这里显示出一些透明度,其他人都没有给出它,这将是一件好事. (3认同)
  • YIKES 700声誉昨天@anomie,只有jon可以做得更好 (2认同)

小智 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/


jfr*_*d00 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));
}
Run Code Online (Sandbox Code Playgroud)

要查看正在监听window.onmousemove的内容,之后你必须这样做,因为它只是一个变量赋值,而不是你可以拦截的函数.因此,有时在页面的初始化代码运行之后,您可以执行此操作来记录连接到它的内容:

if (window.onmousemove) {
    console.log(window.onmousemove.toString().slice(0,80));
}
Run Code Online (Sandbox Code Playgroud)

  • 好主意,但是如果脚本设置了旧式的`window.onmousemove`而不是(如Google的脚本那样),这将不起作用. (2认同)

NoB*_*ugs 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))
    }
}();
Run Code Online (Sandbox Code Playgroud)

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

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