有关前端使用 JS 生成音频指纹指代浏览器唯一用户,是否存在不稳定的问题

2022-03-06 10:01:14 +08:00
 LeeReamond

如题,近期需求对匿名用户进行追踪,需要对身份进行唯一标记,前天发帖询问短哈希后楼内老哥提到可以使用 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

2836 次点击
所在节点    问与答
12 条回复
rming
2022-03-06 10:05:19 +08:00
浏览器隐私模式就没了,不可靠
supermoonie
2022-03-06 10:08:44 +08:00
看下这两个链接吧,一个是生成浏览器指纹的库,一个是跨浏览器指纹技术的论文
https://fingerprintjs.com/
http://yinzhicao.org/TrackingFree/crossbrowsertracking_NDSS17.pdf
0o0O0o0O0o
2022-03-06 10:10:11 +08:00
LeeReamond
2022-03-06 10:10:25 +08:00
@rming 有些需求是例如反爬虫,需要提高指纹的抗伪造性能,有些只是需要标记合法的唯一用户以追踪他们的行为,伪造用户的行为只是单纯污染数据库,在我的需求下影响不是很大,只是我不希望正常用户的指纹是不稳定的,今天被认为是一个人,明天被认为是另外一个人,这样会造成行为逻辑中断
0o0O0o0O0o
2022-03-06 10:11:10 +08:00
supermoonie
2022-03-06 10:11:38 +08:00
@0o0O0o0O0o 哈哈哈 有意思了
kingjpa
2022-03-06 10:12:19 +08:00
既然匿名,没有鉴权机制本身就不可靠, 同一设备不同浏览器 得出的结果都不是唯一的。
大部分都是 ,用画布 屏幕尺寸像素 地理位置 内置字体 header 头 多个维度组合,然后生成一个总分, 然后每次请求判断,越接近这个总分越有可能是同一用户 。

这种往往是用在统计分析 这种对精确度没那么高的场景下,要是代替登录关联业务 那就不好使了
rming
2022-03-06 10:21:50 +08:00
@LeeReamond 之前曾经作为 uuid 踩过坑,重复问题比较严重,好像也是一堆参数的 hash ,会重复的,建议看看原理。
ff 浏览器有隐私开关,chrome 也有插件,反指纹难度不高,我就放弃了。
有些可能不准确,2 年前用过,记不清了
Maboroshii
2022-03-06 10:40:51 +08:00
别人都隐私模式了 还能吃你投放的内容吗。。
Soar360
2022-03-06 11:12:00 +08:00
这种,主要还是为了反爬吧……
krapnik
2022-03-06 11:23:15 +08:00
LeeReamond
2022-03-07 01:08:24 +08:00
@krapnik 很有趣,但是文档写的不是很清楚。demo 页面我访问了没看明白他生成的指纹是指啥。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/838308

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX