要给EMUI点赞。
这个事情如果不了解Android文件管理,会感到迷惑。实际上锅100%属于App,如果一定要找陪葬的,也是Android设计失误。厂商的系统已经努力的在补救了。这个事情里面,Google责任40%,QQ责任60%,华为系统完全无责。
Android的开发规范里面,App可以默认读写自己目录下面的东西,不需要权限。但是如果要读写存储空间的其他位置,需要申请权限。看起来合理对吧,你自己家随便折腾,别人房间需要征求同意。
这里出现了第一个坑。Android没有像Linux那样,给每个目录和文件都附加了严格权限,也没有学习iOS,把相册独立出来。而是整个存储空间视为一个统一权限。于是,为了读取相片,竟然获得了读取“任意其他文件”的权限。
第二个坑则在于,系统并没有提供App间共享内容的渠道,于是App就看中了第一个坑,把存储空间当做一个巨大的共享目录。广为诟病的App胡乱建目录和文件夹的问题就是这么搞出来的。
这就产生了巨大的安全漏洞。只要获得外部存储权限,甲App存储的文件,乙App可以读取,甚至可以删除或者改写。你没看错,仿佛一把钥匙打开整栋大楼甚至整个小区的门,这种骚操作就是Android搞出来的。到了这种程度,基本上一个系统的脸已经丢光了,没有什么资格谈论诸如“安全”“隐私”之类的话题了。
Google方面的技术实力不会理解不了,但一直采取“掩耳盗铃”的策略,用Googleplay的审核来搪塞。但一来App太多审核效率极低,二来作为开源软件系统无法阻止其他途径安装apk。所以整个Android相当于“门户洞开”,根本谈不上什么安全性。
然后各路App开发者,水平参差不齐,或有用心叵测,就在这个漏雨的大厦里面开发。于是每个App都把存储空间当成了垃圾场。即使应该放在自己目录内部的,比如缓存,也大摇大摆的往外部存储去存放。然后又搞出来,不给存储权限就退出这种流氓操作,谎称无法读写存储就不能工作。其实骗人的,App自己有存储空间,存储权限是用来“访问其他存储”的。
记住,凡是声称,不给存储就不能写文件的,都属于跑偏。只是不能“共享文件”而已,App永远有权读写文件,只不过必须放在自己目录里面。
于是国产厂商想方设法进行弥补这个安全隐患,自己追加、开放了很多隐藏功能。比如EMUI据说默认关闭了外部存储的访问权限。这个时候App无法确定自己是否能够成功的把图片存入相册,就自作主张的创建了缓存(在公共空间)。发现读写OK之后,就把图片重新写入到相册,然后删除缓存。但是系统根本无法判断,App到底删除的是自己的内容,还是别人的内容,于是只好发一个警告信息去提醒用户。
我们回到最初,为什么会有如此混乱的现象。1,存储空间门户大开,文件存储随心所欲。2,因为1造成,无法识别文件的从属关系,也不能有效识别正常访问和恶意访问。3,App编写胡作非为,无视开发规范要求,比如缓存有专门的缓存空间,根本不涉及到外部存储。
怎么解决,简单到爆炸,Google因为商业利益纵容App而迟迟不肯解决而已。实际上第三方工具早就解决了这个问题:存储重定向,请自行搜索。
对策:
1,相册从存储权限中独立出来。
2,把App关闭在沙箱里面,禁止访问公共存储空间。
3,提供“共享空间”或者“共享API”,App主动共享出来的内容才允许公共访问。iOS用云服务来共享的,如果觉得麻烦,可以在系统内部建一个本地共享服务,专门提供共享内容读写的。
Android10就已经提出来storage scope,收紧存储空间的访问权。但为了给App留条命,暂缓实施了。Android11能否正式推出这个storage scope功能,依然未知。但从趋势上看,这个漏洞确实到了必须补上的时候了。一切辩解这不是漏洞的都被storage scope给打脸了。
回到最初的问题:
App把图片缓存到外部存储,是错误的行为,违反开发规范。黑锅属于QQ自己请老老实实背好不要狡辩。
系统的举动属于亡羊补牢,确实不完美。完美策略建议参考存储重定向,直接“欺骗”App,把“外部存储读写”,偷偷换成读写自己目录,即可无缝解决。
此类功能建议小米华为赶快加上。不然再把动画、图标重画一百遍也属于无用功,拍马都赶不上iOS。
资本的常规操作!
去党媒、中央媒体举报吧,这样才能遏制腾讯!
tx再一次,把自己的名声搞臭
这几年刚安分了点,一些不知tx黑历史的00后硬是把他夸成良心企业
现在是人是鬼大家都看清楚了吧
我差点儿就买票了,临了去了趟豆瓣。
哎!