V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
nanaw
V2EX  ›  问与答

关于 js 获取浏览器指纹

  •  
  •   nanaw · 2019-03-17 08:43:02 +08:00 · 4702 次点击
    这是一个创建于 2080 天前的主题,其中的信息可能已经有所发展或是发生改变。

    UTOOLS1552783198848.png RT,偶然看到一文讲 js 获取浏览器指纹的。 本人对前端一窍不通,但猜想 js 要获取这些信息总要通过调用函数 /接口 /方法吧。。 而现在网站严重依赖 js 也不能禁用,那为什么没有相关的扩展 /脚本 /浏览器机制 来 hook 相关的方法 /函数从而保护信息呢。。

    第 1 条附言  ·  2019-03-18 16:28:41 +08:00
    chrome 商店搜 webGL 的时候找了一个插件

    https://chrome.google.com/webstore/detail/browser-plugs-fingerprint/gpgbpgdfipppcelfbdlbkhmibofknppj

    https://www.browserplugs.com/

    看起来似乎满足条件了。但发现它破坏了某些网页(如 github )有奇怪的 bug
    14 条回复    2019-03-17 17:23:02 +08:00
    IsaacYoung
        1
    IsaacYoung  
       2019-03-17 09:02:13 +08:00
    Proxy
    gamexg
        2
    gamexg  
       2019-03-17 09:06:41 +08:00   ❤️ 1
    搞过,扩展级别的能够 hook 掉对应的函数或伪造结果。
    但是,伪造的数据类型和系统数据类型并不一致,专门检查的话反而更明显。字体也只能增加伪造字体并不能减少字体。

    听说 Tor Browser 浏览器有防跟踪功能,但是没研究过。
    qiayue
        3
    qiayue  
       2019-03-17 09:16:50 +08:00
    其实没那么神奇,重复率很高,并不能够准确识别同一台设备
    nanaw
        4
    nanaw  
    OP
       2019-03-17 09:35:29 +08:00
    @gamexg 这就有一种蛋生鸡鸡生蛋的感觉了。既然可以通过 hook 完全蒙蔽 js 获取的信息,那么又如何被检查到的呢,。。
    (如系统类型,版本,浏览器窗口大小,分辨率,时区,ua 这些信息)
    gamexg
        5
    gamexg  
       2019-03-17 09:49:12 +08:00   ❤️ 1
    @nanaw #4 非前端,而且这个也很长时间了,记不太清。
    大概问题是 js 系统函数返回的数据类型并不是普通 Object,而是根据函数不同返回不同的类。

    有些返回的类型应该是内置类,无法直接创建这种类的对象。有些可以直接使用系统函数返回的对象做修改后在返回给用户,但是有些无法修改,即使 defineProperties 函数也无法修改。那么只能返回自己创建的 Object 对象了,专门检查这个就能够发现在伪造指纹。

    我是非前端,当时看过原型链等 js 类型系统,还是没能解决这个问题。也许专业前端能够搞定这个。

    另外印象还有很多地方存在这种问题,例如字体,字体增加其实是用现存字体创建一个别名,对比的话能够发现这个问题。
    loading
        6
    loading  
       2019-03-17 09:50:40 +08:00
    浏览器指纹是做风控用的,当然,这是风控的一个非常小的一个要素而已。
    其他都没啥用。
    plqws
        7
    plqws  
       2019-03-17 09:53:40 +08:00
    真正的指纹不存在的,浏览器本来就是个沙箱环境,同版本操作系统+同版本浏览器+同外网 IP,基本没有任何区别。
    daquandiao2
        8
    daquandiao2  
       2019-03-17 10:15:08 +08:00
    @plqws 有的 js 指纹会计算 webGL 的绘制时间,所以不同 GPU 的处理性能也是一个考量
    nanaw
        9
    nanaw  
    OP
       2019-03-17 10:19:36 +08:00
    @loading
    @plqws 即使这些信息已经很多了,再加上分辨率,窗口,,等一些其他的东西,配合同外网 IP 已经足以锁定追踪用户了。
    nanaw
        10
    nanaw  
    OP
       2019-03-17 10:25:12 +08:00
    @gamexg 大概就是说 js 可以通过主动探测来发现 hook 么。。。可这种一来应该可以“被适配”,检测和反检测之间相互攻防。
    二来既然如此不考虑被检测到那 js 可以被 hook 然而没有找到这样的插件啊。。。只想隐藏自己的浏览器的一些信息而不考虑被发现 hook 的情况下
    nanaw
        11
    nanaw  
    OP
       2019-03-17 10:28:15 +08:00
    @daquandiao2 可是这样能保证同一台机器每次计算时所花费的时间 /性能完全相同不变吗?
    据我所知跑分每次结果还不一样呢。。就算可以,那有没有什么办法来“干扰”下,这个值变得随机化也就意义不大了吧。。
    tairan2006
        12
    tairan2006  
       2019-03-17 12:47:57 +08:00
    fingerprintjs2
    thelderfrog
        13
    thelderfrog  
       2019-03-17 16:49:26 +08:00
    @nanaw webGL 至少在 Chrome 上是可以直接获取 GPU 型号的
    udev
        14
    udev  
       2019-03-17 17:23:02 +08:00
    我们就做人机识别,严格得说一切可以 Hook 的变量,都可以伪造。只不过普通大众不会或者没意识,所以指纹对于大部分场景还是有效果的,采集信息的维度也会比上面罗列的多,不断对抗的过程。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3584 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:54 · PVG 18:54 · LAX 02:54 · JFK 05:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.