V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
tctc4869
V2EX  ›  JavaScript

现在在浏览器上编写 js 代码能获得设备信息唯一码吗?

  •  1
     
  •   tctc4869 · 2019-11-22 09:12:28 +08:00 · 14090 次点击
    这是一个创建于 1827 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,做 web 应用,要获得手机或电脑的信息唯一码。用来鉴别用户。浏览器由于安全权限问题,连客户端本地文件读写都不行,那有没有办法获得设备唯一信息码?或者是哪些浏览器可以?

    第 1 条附言  ·  2019-11-25 10:11:58 +08:00
    首先我没有用这个窥探用户隐私的想法,我想用设备 id,或者浏览器指纹上报的方式,是防止同一个用户批量注册,更大的目的是增加一个反爬方式,当然可以用动态页面,验证码搞,这些我也知道怎么弄,但这些方式被破的例子又不是没有。

    防止同一个设备的不断发 post 请求,也就是基于客户端指纹的反爬,预防多注册问题。(集群反爬是另外的情况),我记得有通过浏览器指纹反爬的样例

    即便不能获取设备的唯一 id,但即使是用浏览器,同一个浏览器,一个浏览器指纹技术,至少在卸载之前运算出的指纹,至少保证都是一样的,当然如果能获取设备 id,那更好了。
    44 条回复    2019-11-25 09:59:53 +08:00
    MaxJin
        1
    MaxJin  
       2019-11-22 09:14:14 +08:00
    现在用 js 可以啊
    lxk11153
        2
    lxk11153  
       2019-11-22 09:15:33 +08:00
    @MaxJin #1 可以吗? 怎么写?
    tctc4869
        3
    tctc4869  
    OP
       2019-11-22 09:17:24 +08:00
    @MaxJin 所有浏览器都可以吗
    journey0ad
        4
    journey0ad  
       2019-11-22 09:17:25 +08:00 via Android
    Xuebaba
        5
    Xuebaba  
       2019-11-22 09:18:26 +08:00 via iPhone
    fingerprint.js 可以试试,但还是存在同一批机型,id 重复问题,不可避免的。服务器端配合下发 cookie 可以解决问题
    ryougifujino
        6
    ryougifujino  
       2019-11-22 09:20:00 +08:00
    @Xuebaba #5 电脑换个浏览器就不行了吧
    dreamerlv3ex
        7
    dreamerlv3ex  
       2019-11-22 09:22:18 +08:00
    用户 ID 不好用吗...
    ming61177
        8
    ming61177  
       2019-11-22 09:26:53 +08:00
    浏览器指纹?
    tctc4869
        9
    tctc4869  
    OP
       2019-11-22 09:27:43 +08:00
    @dreamerlv3ex 做比较简单的 web 应用,需求上光用户 id 不行,至少还得鉴别用户的设备,至少手机设备唯一信息必须能被确认。如果用手机原生语言开发,倒是容易获取。但成本有点高了。还得学 android 和 ios
    tctc4869
        10
    tctc4869  
    OP
       2019-11-22 09:30:34 +08:00
    @ming61177 这个换个浏览器会不会不一样了?
    weikexin
        11
    weikexin  
       2019-11-22 09:38:08 +08:00
    只能获得浏览器的唯一码,换个浏览器就变了
    fancy111
        12
    fancy111  
       2019-11-22 09:38:35 +08:00
    fingerprint 没用,这只是浏览器指纹,跟机器无关。
    用浏览器目前是无法获取唯一识别码的,浏览器没开放这个接口给你。
    APP 或者桌面软件才行,这要直接获取硬件信息,生成唯一码。目前大部分软件公司也是用这个办法收费的。
    shilyx
        13
    shilyx  
       2019-11-22 09:42:44 +08:00
    我看完全是想多了,浏览器在沙箱里获取硬件信息难,用本地存储的话还有隐身模式的存在

    最佳方案:让客户端装 native 插件
    AaronLiu00
        14
    AaronLiu00  
       2019-11-22 09:45:38 +08:00 via Android   ❤️ 1
    https://audiofingerprint.openwpm.com/
    用 Audio API 获取设备指纹,与浏览器无关
    tctc4869
        15
    tctc4869  
    OP
       2019-11-22 09:49:30 +08:00
    @weikexin 那问一下,同一个浏览器的唯一码,卸载重装后,获得的还是一样的吗
    sujin190
        16
    sujin190  
       2019-11-22 09:53:36 +08:00   ❤️ 2
    web 的基本要求就是不能和设备用户强相关联,就算你能找到也算漏洞估计下一版本就堵上了,通用场景下用 cookie 追踪用户就已经比较高风险了
    gitjavascript
        17
    gitjavascript  
       2019-11-22 10:06:09 +08:00
    https://juejin.im/post/5dc8f8d8f265da4d0c175abe 看看这个,基本上是可以做的,不能保证 100%
    flighter
        18
    flighter  
       2019-11-22 10:14:46 +08:00
    这个我试过, 用 js 无法获取获取设备信息唯一码 (指纹), 是因为隐私原因浏览器不会开放这个接口的, 可以生成浏览器的唯一码,卸载重装后获得的唯一码 (指纹)会改变
    momocraft
        19
    momocraft  
       2019-11-22 10:15:14 +08:00   ❤️ 1
    大部分时候追求用户的唯一 ID 也就那么几个目的
    hkitdog
        20
    hkitdog  
       2019-11-22 10:17:13 +08:00 via iPhone
    用 JS 调用 java 就行
    jin5354
        21
    jin5354  
       2019-11-22 10:28:47 +08:00   ❤️ 2
    工信部刚刚敦促国内互联网公司不允许获取手机 imei,否则要等着挨批
    whypool
        22
    whypool  
       2019-11-22 10:41:21 +08:00   ❤️ 1
    原生都难获取设备 ID,还想 js 获取,太天真了
    TomatoYuyuko
        23
    TomatoYuyuko  
       2019-11-22 10:49:30 +08:00
    fingerprint 我项目中实践过,可以负责任的告诉你非常不靠谱,
    首先是你得要求用户不能动浏览器版本,不能乱装莫名其妙的插件和安全软件(或者流氓软件)
    其次,如果是内部使用,因为配置都差不多,碰撞概率撞到你怀疑人生
    fingerprint.js 和 fingerprint2.js 我都用过,自己手写的也试过,都有各种缺点
    如果要作为准确的识别码纯前端实现几乎不可能,
    除非你去写 electron 一类的可以获取 mac 一类的
    TomatoYuyuko
        24
    TomatoYuyuko  
       2019-11-22 10:51:01 +08:00
    @fancy111 #12 其实多少有点关系,图像渲染质量和硬件相关,更换硬件有概率影响最后生成的结果,但是影响不直观就是了
    locoz
        25
    locoz  
       2019-11-22 11:02:32 +08:00
    精确到设备的做不到,换个浏览器都会有差别。浏览器指纹现成的轮子和商业级产品很多,直接用就行。
    love
        26
    love  
       2019-11-22 11:12:52 +08:00
    别想了,能得到机器唯一 ID 那就是天大的隐私 BUG,马上就会被修复还等你来用?
    fancy111
        27
    fancy111  
       2019-11-22 11:20:44 +08:00
    @TomatoYuyuko 硬件到图像渲染中间还差了一个软件呢,它如何调用处理都是它说了算。
    janxin
        28
    janxin  
       2019-11-22 11:23:01 +08:00
    不可能唯一,只能降低碰撞概率
    TomatoYuyuko
        29
    TomatoYuyuko  
       2019-11-22 11:29:44 +08:00
    @fancy111 #27 这里的软件指的就是浏览器啊,指纹原理就是看浏览器处理能力再混入一些其他参数,
    fancy111
        30
    fancy111  
       2019-11-22 11:37:56 +08:00
    @TomatoYuyuko 这不废话吗,我第一句就是说这是浏览器指纹
    dawen
        31
    dawen  
       2019-11-22 11:41:58 +08:00
    @love 正解
    zhuojiu
        32
    zhuojiu  
       2019-11-22 11:51:05 +08:00
    @Xuebaba 这个只能区别浏览器,设备不行的
    muzuiget
        33
    muzuiget  
       2019-11-22 11:54:31 +08:00
    建议放弃治疗,因为浏览器厂商和网页标准一直避免出现这种事,所以要真唯一,老老实实让用户注册好了。
    jinliming2
        34
    jinliming2  
       2019-11-22 12:42:36 +08:00
    https://github.com/WICG/ua-client-hints/blob/master/README.md
    以后估计 UserAgent 都不太好获取了,我用的 Chrome 80 貌似已经在逐步实施了。
    默认只能得到浏览器主版本号了,虽说服务端下发个头可以获取更多信息,但是我觉得未来浏览器应该可以配置不返回更多信息的……
    reus
        35
    reus  
       2019-11-22 13:36:03 +08:00
    傻逼需求
    uxstone
        36
    uxstone  
       2019-11-22 13:40:55 +08:00
    傻逼需求
    back0893
        37
    back0893  
       2019-11-22 14:36:36 +08:00
    想太多
    no1xsyzy
        38
    no1xsyzy  
       2019-11-22 14:54:16 +08:00
    @TomatoYuyuko 渲染指纹的话但凡一点抖动都会变的,因为最后是对渲染结果图片算 Hash,带雪崩。
    no1xsyzy
        39
    no1xsyzy  
       2019-11-22 15:00:15 +08:00
    我反而不是很明白这一功能的使用场景
    是同设备换浏览器无需重复登录吗?首先一直换浏览器的人本来就少,换浏览器的人常常是在放弃登录状态(比如测试无登录时的效果)
    如果要防泛洪,那你不知道现在的泛洪都是可以做真设备的,养一堆真设备。
    如果你要对某个污染源进行屏蔽,封 IP 或者 IP 段比较稳。
    fuchunliu
        40
    fuchunliu  
       2019-11-22 18:56:18 +08:00 via Android
    这些狗日的一天到晚都在想追踪用户
    Jirajine
        41
    Jirajine  
       2019-11-22 19:01:58 +08:00 via Android
    像我这种用了各种 id 指纹随机化想必也不是贵司欢迎的用户,LZ 不妨透露一下贵司或贵产品名字以供避雷?
    conn4575
        42
    conn4575  
       2019-11-23 09:38:58 +08:00 via Android
    这种实际上挺常见的,不一定是为了追踪用户,例如风控里面防止用户注册多账号褥羊毛,但是确实很大可能都
    会被大数据拿去用做唯一 ID
    myqoo
        43
    myqoo  
       2019-11-23 11:48:57 +08:00
    我就明确告诉你:不能
    tctc4869
        44
    tctc4869  
    OP
       2019-11-25 09:59:53 +08:00
    @conn4575 被你稍微猜到了一点
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4275 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:08 · PVG 18:08 · LAX 02:08 · JFK 05:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.