有关前端使用 JS 生成音频指纹指代浏览器唯一用户,是否存在不稳定的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LeeReamond
V2EX    问与答

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

  •  3
     
  •   LeeReamond 2022-03-06 10:01:14 +08:00 4085 次点击
    这是一个创建于 1326 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,近期需求对匿名用户进行追踪,需要对身份进行唯一标记,前天发帖询问短哈希后楼内老哥提到可以使用 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 条附言    2022-03-06 10:33:39 +08:00
    老哥们虽然很感谢大家提供各种坑,但是主要想询问的是音频指纹是否会带来同用户执行结果不同的问题(在合法用户情况下),我目前的需求不是很在意非法用户伪造信息,以及不同用户碰撞这两种情况。不管怎么说前端指纹再怎么做碰撞也很正常不是吗。。
    12 条回复    2022-03-07 01:08:24 +08:00
    rming
        1
    rming  
       2022-03-06 10:05:19 +08:00 via iPhone
    浏览器隐私模式就没了,不可靠
    supermoonie
        2
    supermoonie  
       2022-03-06 10:08:44 +08:00
    看下这两个链接吧,一个是生成浏览器指纹的库,一个是跨浏览器指纹技术的论文
    https://fingerprintjs.com/
    http://yinzhicao.org/TrackingFree/crossbrowsertracking_NDSS17.pdf
    LeeReamond
        4
    LeeReamond  
    OP
       2022-03-06 10:10:25 +08:00
    @rming 有些需求是例如反爬虫,需要提高指纹的抗伪造性能,有些只是需要标记合法的唯一用户以追踪他们的行为,伪造用户的行为只是单纯污染数据库,在我的需求下影响不是很大,只是我不希望正常用户的指纹是不稳定的,今天被认为是一个人,明天被认为是另外一个人,这样会造成行为逻辑中断
    0o0O0o0O0o
        5
    0o0O0o0O0o  
       2022-03-06 10:11:10 +08:00   1
    supermoonie
        6
    supermoonie  
       2022-03-06 10:11:38 +08:00
    @0o0O0o0O0o 哈哈哈 有意思了
    kingjpa
        7
    kingjpa  
       2022-03-06 10:12:19 +08:00
    既然匿名,没有鉴权机制本身就不可靠, 同一设备不同浏览器 得出的结果都不是唯一的。
    大部分都是 ,用画布 屏幕尺寸像素 地理位置 内置字体 header 头 多个维度组合,然后生成一个总分, 然后每次请求判断,越接近这个总分越有可能是同一用户 。

    这种往往是用在统计分析 这种对精确度没那么高的场景下,要是代替登录关联业务 那就不好使了
    rming
        8
    rming  
       2022-03-06 10:21:50 +08:00 via iPhone
    @LeeReamond 之前曾经作为 uuid 踩过坑,重复问题比较严重,好像也是一堆参数的 hash ,会重复的,建议看看原理。
    ff 浏览器有隐私开关,chrome 也有插件,反指纹难度不高,我就放弃了。
    有些可能不准确,2 年前用过,记不清了
    Maboroshii
        9
    Maboroshii  
       2022-03-06 10:40:51 +08:00 via Android
    别人都隐私模式了 还能吃你投放的内容吗。。
    Soar360
        10
    Soar360  
       2022-03-06 11:12:00 +08:00
    这种,主要还是为了反爬吧……
    krapnik
        11
    krapnik  
       2022-03-06 11:23:15 +08:00
    LeeReamond
    &nbs;   12
    LeeReamond  
    OP
       2022-03-07 01:08:24 +08:00
    @krapnik 很有趣,但是文档写的不是很清楚。demo 页面我访问了没看明白他生成的指纹是指啥。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4550 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 10:01 PVG 18:01 LAX 03:01 JFK 06:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86