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

JS 怎样获取客户端唯一识别信息

  •  
  •   8023 · 2016-12-19 16:16:58 +08:00 · 15495 次点击
    这是一个创建于 2901 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在做一个网页, 环境 LNAMP, PHP 只能获取到客户端 IP 地址, 现在我想获取到有唯一性的客户端识别码, 比如 MAC 之类的. 思路是用 JS 获取然后提交到服务器上, 但网上搜了搜除了用 IE + ActiveX 没啥其他方法了. 请问 V2 的大佬: 有没有什么方法可以获取到客户端 MAC? 如果不能获取到, 有没有类似的信息可以获取到呢?

    22 条回复    2018-03-16 15:42:16 +08:00
    yanyu0517
        1
    yanyu0517  
       2016-12-19 16:19:57 +08:00
    canvas
    knightdf
        2
    knightdf  
       2016-12-19 16:23:27 +08:00   ❤️ 1
    learnshare
        3
    learnshare  
       2016-12-19 16:34:52 +08:00   ❤️ 1
    Don't do that
    INW017bzMfgkkYGn
        4
    INW017bzMfgkkYGn  
       2016-12-19 16:45:26 +08:00   ❤️ 1
    你姐姐的隐形眼镜还好吗
    Rice
        5
    Rice  
       2016-12-19 16:54:48 +08:00 via iPhone
    没有办法,要不试试画布指纹加 cookie 加 etag 加浏览器信息采集组合拳?
    jugelizi
        6
    jugelizi  
       2016-12-19 16:56:11 +08:00
    这种行为....
    R18
        7
    R18  
       2016-12-19 16:58:34 +08:00
    浏览器指纹么? Fingerprintjs2 但如果你真的是想要 MAC 地址 我想也许是很难的吧??
    leega0
        8
    leega0  
       2016-12-19 17:31:31 +08:00 via iPhone
    canvas ,学到了
    woyaojizhu8
        9
    woyaojizhu8  
       2016-12-19 17:58:55 +08:00
    利用缓存跟踪,最难避免
    gongbaodd
        10
    gongbaodd  
       2016-12-19 18:10:36 +08:00
    canvas ,学习了+1
    yushiro
        11
    yushiro  
       2016-12-19 18:14:51 +08:00 via iPhone
    canvas 那个不行,重复率还是很高的,我试了几个 iphone 手机都一样的指纹
    UnisandK
        12
    UnisandK  
       2016-12-19 18:29:36 +08:00
    UnisandK
        13
    UnisandK  
       2016-12-19 18:33:53 +08:00   ❤️ 2
    1. 浏览器在使用过程中,所使用的缓存机制会暴露。
    你最近访问过支付宝,那么在缓存期间,访问支付宝的响应速度会很快。这些对于不同网站的访问速度,可以得出类似用户访问历史的数据,而每个人这份数据都是不同的,你爱淘宝我爱天猫就是如此。

    这个是很有意思的一个思路,比如下边这个

    http://www.solidot.org/story?sid=45943
    q397064399
        14
    q397064399  
       2016-12-19 18:52:52 +08:00
    这个几乎无解,浏览器 设置成 隐私模式 你很难 跟踪某个客户,
    用 IP 来判断 很容易误伤,尤其是现在 手机 这么多设备都是 在公网 IP 后面
    另外广域网 无法跟踪对面的 mac

    当然针对普通用户 cookies 就差不多够了
    miyuki
        15
    miyuki  
       2016-12-19 19:00:06 +08:00 via Android
    MAC 地址基本无解

    可以有类似的指纹比如 Canvas Fingerprint
    t6attack
        16
    t6attack  
       2016-12-19 20:29:39 +08:00
    和 php 、服务环境没关系,任何服务端环境、任何语言,都只能获取数据报文里有的东西。
    MAC 就别想了。连运营商都拿不到 NAT 里面设备的 MAC 。

    另外,除了 IP 地址,其他信息都可以 0 成本伪造。如果目的是为了限制重复注册之类的,这没用。
    zxy
        17
    zxy  
       2016-12-19 21:54:20 +08:00 via Android
    @default 看了你的回复,忍不住去看了那贴,也想知道那个隐形眼镜拿掉了么…
    zsx
        18
    zsx  
       2016-12-19 22:10:33 +08:00
    Canvas FingerPrint 没什么意义,我去年测试的结果是“由浏览器在不同环境下生成的 Canvas 图像不同而得以追踪用户,所以是跟着浏览器走。无法被清除,但当浏览器更新,或是安装什么奇怪的软件后可能便会被视为一个新用户。在 IE10+生成的信息完全一样,在同配置的 iPhone 上生成的信息也完全一样。其它浏览器下重复率非常高。”

    当时最有意义的还是 HSTS SuperCookie ,不过 Firefox 34+也不能用了,而且这玩意慢的要命。总之,你只能综合判断,但没法获知身份。
    em70
        19
    em70  
       2016-12-19 22:12:28 +08:00 via Android
    让用户注册吧
    pigsinthesky
        20
    pigsinthesky  
       2016-12-19 22:15:22 +08:00
    cookie+注册
    mingyun
        21
    mingyun  
       2016-12-19 22:52:38 +08:00
    js 获取不靠谱吧
    qsnow6
        22
    qsnow6  
       2018-03-16 15:42:16 +08:00
    如果是为了防止重复注册

    * 如果你依赖 Cookies 或缓存,清理一下就没了
    * 如果是依赖 IP,挂下代理就伪装了

    -----------

    从 HTTP 协议的角度来看,底层协议本身就是无状态的,无法做到绝对的唯一。如果可以接受一定的重复率,可以看看楼上提到的 Canvas
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5982 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:06 · PVG 10:06 · LAX 18:06 · JFK 21:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.