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

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

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

    如题,近期需求对匿名用户进行追踪,需要对身份进行唯一标记,前天发帖询问短哈希后楼内老哥提到可以使用 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
        12
    LeeReamond  
    OP
       2022-03-07 01:08:24 +08:00
    @krapnik 很有趣,但是文档写的不是很清楚。demo 页面我访问了没看明白他生成的指纹是指啥。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1009 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:44 · PVG 03:44 · LAX 11:44 · JFK 14:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.