如题,近期需求对匿名用户进行追踪,需要对身份进行唯一标记,前天发帖询问短哈希后楼内老哥提到可以使用 canvas 指纹代表用户。我搜索相关内容后如同打开了新世界的大门,头一次知道还有这种标记用户身份的方法。进而搜索得知音频设备也可以用来生成指纹,但是百度博客相关文章提到音频可能导致指纹不稳定(同设备多次执行结果不同),原文地址:https://blog.csdn.net/cen_cs/article/details/106341724
我复现过程中未遇到此问题,想请问有无论坛老哥遇到过类似问题,或者这个不稳定问题纯粹是写这篇博客的老哥乱扯的?
======
另外问一下有关 js 写法,查到的音频指纹生成代码的伪代码类似下述
var AudioContext = ... // 链接音频设备
var context = new AudioContext(...) // 生成一段音频
... // 配置音频内容
context.oncomplete = function (event) {
...
console.log(fingerprint) // 在音频生成完毕后触发回调,计算并输出音频指纹
}
考虑到使用中为了便捷调用,理想的情况希望将整个功能写在同一个函数里,即
let get_audio_fingerprint = () => {...};
let device_fingerprint = get_canvas_fingerprint() + get_audio_fingerprint(); // 类似这种调用方法
但是如上述伪代码中指纹生成是在回调函数里完成的,应该怎么把这个回调函数的结果返回给外层呢?试了试 promise ,但是得到浏览器提示说内层不允许调用 promise
1
rming 2022-03-06 10:05:19 +08:00 via iPhone
浏览器隐私模式就没了,不可靠
|
2
supermoonie 2022-03-06 10:08:44 +08:00
看下这两个链接吧,一个是生成浏览器指纹的库,一个是跨浏览器指纹技术的论文
https://fingerprintjs.com/ http://yinzhicao.org/TrackingFree/crossbrowsertracking_NDSS17.pdf |
3
0o0O0o0O0o 2022-03-06 10:10:11 +08:00
|
4
LeeReamond OP @rming 有些需求是例如反爬虫,需要提高指纹的抗伪造性能,有些只是需要标记合法的唯一用户以追踪他们的行为,伪造用户的行为只是单纯污染数据库,在我的需求下影响不是很大,只是我不希望正常用户的指纹是不稳定的,今天被认为是一个人,明天被认为是另外一个人,这样会造成行为逻辑中断
|
5
0o0O0o0O0o 2022-03-06 10:11:10 +08:00 1
|
6
supermoonie 2022-03-06 10:11:38 +08:00
@0o0O0o0O0o 哈哈哈 有意思了
|
7
kingjpa 2022-03-06 10:12:19 +08:00
既然匿名,没有鉴权机制本身就不可靠, 同一设备不同浏览器 得出的结果都不是唯一的。
大部分都是 ,用画布 屏幕尺寸像素 地理位置 内置字体 header 头 多个维度组合,然后生成一个总分, 然后每次请求判断,越接近这个总分越有可能是同一用户 。 这种往往是用在统计分析 这种对精确度没那么高的场景下,要是代替登录关联业务 那就不好使了 |
8
rming 2022-03-06 10:21:50 +08:00 via iPhone
@LeeReamond 之前曾经作为 uuid 踩过坑,重复问题比较严重,好像也是一堆参数的 hash ,会重复的,建议看看原理。
ff 浏览器有隐私开关,chrome 也有插件,反指纹难度不高,我就放弃了。 有些可能不准确,2 年前用过,记不清了 |
9
Maboroshii 2022-03-06 10:40:51 +08:00 via Android
别人都隐私模式了 还能吃你投放的内容吗。。
|
10
Soar360 2022-03-06 11:12:00 +08:00
这种,主要还是为了反爬吧……
|
11
krapnik 2022-03-06 11:23:15 +08:00
|
12
LeeReamond OP @krapnik 很有趣,但是文档写的不是很清楚。demo 页面我访问了没看明白他生成的指纹是指啥。。
|