现在很多 iOS App 用 Keychain 保存设备标识,这是滥用吗?和 Android App 用 imei 作为设备唯一标识的区别在哪? - V2EX
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 11521 次点击
    这是一个创建于 2719 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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  
    PRO
       2018-07-16 18:46:41 +08:00
    https://developer.apple.com/documentation/devicecheck

    你可以了解一下这个,这个东西设计就是在保护用户隐私的前提下,标记用户是否享受过相关优惠之类的商业逻辑。很多不是用 Keychain,就是用这个。
    yemoluo
        23
    yemoluo  
       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     Solana     3206 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 11:17 PVG 19:17 LAX 03:17 JFK 06:17
    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