RT,偶然看到一文讲 js 获取浏览器指纹的。 本人对前端一窍不通,但猜想 js 要获取这些信息总要通过调用函数 /接口 /方法吧。。 而现在网站严重依赖 js 也不能禁用,那为什么没有相关的扩展 /脚本 /浏览器机制 来 hook 相关的方法 /函数从而保护信息呢。。
1
IsaacYoung 2019-03-17 09:02:13 +08:00
Proxy
|
2
gamexg 2019-03-17 09:06:41 +08:00 1
搞过,扩展级别的能够 hook 掉对应的函数或伪造结果。
但是,伪造的数据类型和系统数据类型并不一致,专门检查的话反而更明显。字体也只能增加伪造字体并不能减少字体。 听说 Tor Browser 浏览器有防跟踪功能,但是没研究过。 |
3
qiayue 2019-03-17 09:16:50 +08:00
其实没那么神奇,重复率很高,并不能够准确识别同一台设备
|
4
nanaw OP @gamexg 这就有一种蛋生鸡鸡生蛋的感觉了。既然可以通过 hook 完全蒙蔽 js 获取的信息,那么又如何被检查到的呢,。。
(如系统类型,版本,浏览器窗口大小,分辨率,时区,ua 这些信息) |
5
gamexg 2019-03-17 09:49:12 +08:00 1
@nanaw #4 非前端,而且这个也很长时间了,记不太清。
大概问题是 js 系统函数返回的数据类型并不是普通 Object,而是根据函数不同返回不同的类。 有些返回的类型应该是内置类,无法直接创建这种类的对象。有些可以直接使用系统函数返回的对象做修改后在返回给用户,但是有些无法修改,即使 defineProperties 函数也无法修改。那么只能返回自己创建的 Object 对象了,专门检查这个就能够发现在伪造指纹。 我是非前端,当时看过原型链等 js 类型系统,还是没能解决这个问题。也许专业前端能够搞定这个。 另外印象还有很多地方存在这种问题,例如字体,字体增加其实是用现存字体创建一个别名,对比的话能够发现这个问题。 |
6
loading 2019-03-17 09:50:40 +08:00
浏览器指纹是做风控用的,当然,这是风控的一个非常小的一个要素而已。
其他都没啥用。 |
7
plqws 2019-03-17 09:53:40 +08:00
真正的指纹不存在的,浏览器本来就是个沙箱环境,同版本操作系统+同版本浏览器+同外网 IP,基本没有任何区别。
|
8
daquandiao2 2019-03-17 10:15:08 +08:00
@plqws 有的 js 指纹会计算 webGL 的绘制时间,所以不同 GPU 的处理性能也是一个考量
|
9
nanaw OP |
10
nanaw OP @gamexg 大概就是说 js 可以通过主动探测来发现 hook 么。。。可这种一来应该可以“被适配”,检测和反检测之间相互攻防。
二来既然如此不考虑被检测到那 js 可以被 hook 然而没有找到这样的插件啊。。。只想隐藏自己的浏览器的一些信息而不考虑被发现 hook 的情况下 |
11
nanaw OP @daquandiao2 可是这样能保证同一台机器每次计算时所花费的时间 /性能完全相同不变吗?
据我所知跑分每次结果还不一样呢。。就算可以,那有没有什么办法来“干扰”下,这个值变得随机化也就意义不大了吧。。 |
12
tairan2006 2019-03-17 12:47:57 +08:00
fingerprintjs2
|
13
thelderfrog 2019-03-17 16:49:26 +08:00
@nanaw webGL 至少在 Chrome 上是可以直接获取 GPU 型号的
|
14
udev 2019-03-17 17:23:02 +08:00
我们就做人机识别,严格得说一切可以 Hook 的变量,都可以伪造。只不过普通大众不会或者没意识,所以指纹对于大部分场景还是有效果的,采集信息的维度也会比上面罗列的多,不断对抗的过程。
|