V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
cairnechen
V2EX  ›  iDev

现在很多 iOS App 用 Keychain 保存设备标识,这是滥用吗?和 Android App 用 imei 作为设备唯一标识的区别在哪?

  •  
  •   cairnechen · 2018-07-16 11:35:39 +08:00 · 11039 次点击
    这是一个创建于 2324 天前的主题,其中的信息可能已经有所发展或是发生改变。
    31 条回复    2018-07-17 15:38:58 +08:00
    laoyur
        1
    laoyur  
       2018-07-16 11:43:33 +08:00
    算是一种滥用,keychain 本意是给你存密码的
    但是大家都在这么用,苹果可能还不太敢一下子禁用这个 feature,打击面太大
    再者每个应用也就占用那么点空间,并不会对 sqlite 数据库造成太大影响(来电拦截的数据库有 100M+你信不信),可能暂时就放任不管了
    cairnechen
        2
    cairnechen  
    OP
       2018-07-16 11:50:35 +08:00
    @laoyur 我觉得现在最大的问题是你没得选,App 想用就用,完全不需要经过你同意,Android 还可以禁用获取 IMEI 的权限呢
    cairnechen
        3
    cairnechen  
    OP
       2018-07-16 11:53:27 +08:00   ❤️ 1
    @laoyur 搜了一下苹果好像试图改过,但不知道怎么不了了之了
    https://zhuanlan.zhihu.com/p/25708902
    laoyur
        4
    laoyur  
       2018-07-16 11:55:36 +08:00
    也就只在 beta 版里改过,估计开发者反映强烈,就不了了之了
    你的看法我是赞同的,非越狱用户确实无可奈何┓( ´∀` )┏
    honeycomb
        5
    honeycomb  
       2018-07-16 11:56:00 +08:00 via Android   ❤️ 2
    @cairnechen

    1,是滥用,iOS11 的某几个 beta 曾经修复了这个漏洞,但后来便回滚了。

    2,Android 的洞要多得多,比如 sdcard 分区权限的问题很难用 appops 对付。至于用 appops 能轻易挡住的也有 countermeasure,比如美团的某些应用就用了,它读到 IMEI 是 null ( appops 禁用的效果)也会原地爆炸。

    至于应用无需任何权限便可获取的唯一识别码,在 Android 9 beta4 依然存在,即设备 WiFi 的 mac,这个问题从 Android 7 一路修到现在(通过 Android 自带 API 或 proc 文件系统的办法都堵上了)都没全修好。

    国内厂商自己写的识别码库肯定在用。
    honeycomb
        6
    honeycomb  
       2018-07-16 11:57:47 +08:00 via Android
    还有,Android 的 ssaid (也就是应用可见到的 Android id )不会随着卸载-重装而变化(而是仅在恢复出厂 /不同用户之间使用不同的种子),这也是相比于 iOS 的漏洞。

    iOS 里 appid 和 vendor id 都会随着应用卸载而失去意义
    finab
        7
    finab  
       2018-07-16 11:59:51 +08:00
    区别在于某个 App 生成的唯一标识符 和 另外一个 APP 生成的不一样
    不同公司的 APP 数据不能共享,就限制了跟踪
    什么百度搜了啥,淘宝立马给你推荐就不能用这个了

    其实没什么大用,满足了唯一标识符的刚需,想做坏事还是蛮难的
    CastleBUPT
        8
    CastleBUPT  
       2018-07-16 12:04:33 +08:00
    是滥用,虽然我是开发者,但是支持把这项禁用掉
    huclengyue
        9
    huclengyue  
       2018-07-16 12:09:18 +08:00 via Android
    @honeycomb 楼主只是在吐槽 ios 的 keychain 你为啥要在这翻安卓的问题。。。
    wawehi
        10
    wawehi  
       2018-07-16 12:10:39 +08:00 via iPhone   ❤️ 1
    这个做个游客登录功能还是需要存下的,不然游戏让你无限刷账号?
    kera0a
        11
    kera0a  
       2018-07-16 12:13:06 +08:00 via iPhone
    @wawehi 对,相对于 App 跟踪用户带来的坏处,也有很多刚需场景,不赞同去掉
    honeycomb
        12
    honeycomb  
       2018-07-16 13:08:42 +08:00 via Android
    @huclengyue 楼主提到了 Android 而且提问了 iOS 和 Android 的区别,那么在这里翻翻 Android 的做法(总体上比 iOS 差很多),并和 iOS 做比不是很合适嘛
    Biscuits
        13
    Biscuits  
       2018-07-16 14:07:04 +08:00
    是滥用, 区别在于 iOS 是 APP 自己生成的, Android 是设备绑定.
    Biscuits
        14
    Biscuits  
       2018-07-16 14:09:24 +08:00
    @wawehi 手动无限刷账户? 数据那么好看, 开发商还不乐死.
    @kera0a 中国人要什么隐私.
    kera0a
        15
    kera0a  
       2018-07-16 14:22:24 +08:00 via iPhone
    @Biscuits 请问这个会丢失你什么隐私
    iwtbauh
        16
    iwtbauh  
       2018-07-16 18:06:50 +08:00 via Android
    @honeycomb 亲测美团 appops 禁用 IMEI 权限并没有任何影响
    版本 9.4.2 (play 版本)
    iwtbauh
        17
    iwtbauh  
       2018-07-16 18:10:16 +08:00 via Android
    @honeycomb 另外 Android 8.1 用户亲测没有 root 无法获取 mac 地址,我怕不是用了假 Android
    iwtbauh
        18
    iwtbauh  
       2018-07-16 18:14:19 +08:00 via Android
    @iwtbauh #17 备注:我说的无法获取 mac 是指用 appops 禁用 WiFi 状态权限后,android 系统 api,/proc,以及 POSIX ioctl 都无法获取 mac 地址
    icyalala
        19
    icyalala  
       2018-07-16 18:29:20 +08:00
    iOS App 存在 Keychain 里的东西,不是设备标识,这就是和安卓 IMEI 最大的区别。
    IMEI 是设备终身唯一的,不会随着删除 App、重装系统之类的操作而改变。

    iOS 的 OpenUDID 那套东西,是在 App 内随机生成一个字符串保存在 Keychain 里,只要 Keychain 清空,这个字符串也会消失,所以这玩意儿根本不是设备标识。目前只有在设置里面重置数据选项,或者刷机才能清空 Keychain。

    只用于统计的话,IDFA 才是苹果提供的接口,而且这个也允许用户直接删除以去除追踪。用 Keychain 来保存确实不是苹果本意。但 Keychain 如果要是像 iOS 11 Beta 版那样,随着 App 删除而清空,那 Keychain 几乎就没什么用途了。
    cairnechen
        20
    cairnechen  
    OP
       2018-07-16 18:33:42 +08:00
    @icyalala
    “目前只有在设置里面重置数据选项,或者刷机才能清空 Keychain。 ”
    所以我认为他现在起到了设备标识的作用
    huclengyue
        21
    huclengyue  
       2018-07-16 18:37:43 +08:00 via Android
    @icyalala IMEI 是可以改的。不过要高通和 mtk 的工具。前几年的韩版,美版手机打开移动,电信网络就是通过这个。安卓也提供了 systemID Android ID 只是跟 ios 一样 没人用这个
    beimenjun
        22
    beimenjun  
       2018-07-16 18:46:41 +08:00
    https://developer.apple.com/documentation/devicecheck

    你可以了解一下这个,这个东西设计就是在保护用户隐私的前提下,标记用户是否享受过相关优惠之类的商业逻辑。很多不是用 Keychain,就是用这个。
    GTim
        23
    GTim  
       2018-07-16 18:49:38 +08:00
    不算乱用,因为级别不一样
    honeycomb
        24
    honeycomb  
       2018-07-16 18:52:22 +08:00 via Android
    @iwtbauh 你提到的方法确实都封堵了,这次发现的可以到 issuetracker ( developer preview 的)上看,好像是半年前就已经发现了。

    是用 Java 自己的一个 API 枚举出和网络有关的对象,然后可以从那个对象里取出 WiFi 的 mac

    具体名字不记得,确认至少 8.1 与 p 都能复现,再早的 Android 版本没有尝试过。
    cairnechen
        25
    cairnechen  
    OP
       2018-07-16 18:59:34 +08:00
    @beimenjun
    知道这个,但我举的这些例子,比如虎扑、知乎这些,能够保存你的关注的球队,用户、话题、专栏,还有收藏的回答,显然已经不是 devicecheck 能实现的了
    icyalala
        26
    icyalala  
       2018-07-16 19:25:10 +08:00
    @cairnechen 你问的是区别嘛,区别就是普通用户有没有能力改掉。
    IMEI、MAC 之类的,本身设计的就是设备标识。随机生成字符串那个,只能算是没有设备标识可用的情况下一种 workaround,还很脆弱很不靠谱,实际统计结果还不如苹果的 IDFA 准确。
    icyalala
        27
    icyalala  
       2018-07-16 19:25:47 +08:00
    @beimenjun DeviceCheck 那个东西,且不说是 iOS 11 only 的,2bit 也就能存 4 个状态。苹果从来不为企业开发者考虑,从来没有。。对于个人开发者,App 标识一个优惠或者试用功能,那 2bit 够用。企业 App 可能需要存很多状态和设备相关数据,2bit 简直就是嘲讽。。苹果要是把这个做好,然后再允许用户手动删除单个 App Keychain,那不论开发者还是用户,大家谁都没话说。
    wawehi
        28
    wawehi  
       2018-07-16 20:15:51 +08:00
    @Biscuits no, 这些都只是为了刷游客的登录或者注册奖励的, 不会对系统有任何正面的作用
    honeycomb
        29
    honeycomb  
       2018-07-17 09:15:29 +08:00 via Android
    @icyalala 可是存了和设备很多相关的状态,就不符合“ your iphone should look like the same as everyone else' iphone ”的要求了
    Biscuits
        30
    Biscuits  
       2018-07-17 15:35:32 +08:00
    @kera0a "相对于 App 跟踪用户带来的坏处", 你自己不是有答案了, 干吗要再问一遍.
    kera0a
        31
    kera0a  
       2018-07-17 15:38:58 +08:00 via iPhone
    @Biscuits 可这也能上升到中国人隐私问题吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1313 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:49 · PVG 01:49 · LAX 09:49 · JFK 12:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.