標籤:

為什麼 Android 4.4 KitKat 限制第三方應用的 SD 卡讀寫許可權?

如何理解 Google Android 開發團隊的這個決定?

&> "The WRITE_EXTERNAL_STORAGE permission must only grant write access to the primary external storage on a device. Apps must not be allowed to write to secondary external storage devices, except in their package-specific directories as allowed by synthesized permissions."

&> The only stated reason for this removal of functionality is that, "Restricting writes in this way ensures the system can clean up files when applications are uninstalled." I do not pretend to understand this logic. Apps are still allowed to write in arbitrary directories on the primary storage (with the appropriate permission), but are denied the same access to external storage.

Via KitKat will make your SD Card useless &> https://plus.google.com/+TodLiebeck/posts/gjnmuaDM8sn


這有可能真的只是一個限制,影響很小,因為這個限制並不徹底,primary external storage 仍然可寫,而支持雙 SD 的設備並不很多。我們大家更期待的是讓 primary external storage 也同樣受到這個限制,雖然這個修改將涉及到更多應用的不兼容。

所以這個問題並沒有徹底解決,到對 primary external storage 也限制的那個時候,才真正的解決了這個問題。

就目前而言,第二 SD 卡仍然是可以讀寫的,只是要讀寫到指定的目錄(具體應該在 /Android/data/)。這樣的規定意味著應用程序只能對 SD 卡的指定目錄進行讀寫,不能讀寫任意目錄。相當於 Google 出手對 SD 卡目錄結構進行了規範。之前 android 不限制目錄,所以各種應用就隨意的在 SD 卡上建一個目錄。然後 SD 卡上的目錄到處都是,用戶對這種現象早就深惡痛絕了!如果 Google 對這件事情下狠手,只能說是大快人心

另外說一下,SD 卡上的指定目錄是這樣獲取的:

1,程序相關的 內置存儲目錄,這個目錄位於內置 flash,應用程序可以隨意讀寫:

getFilesDir();

2,程序相關的 SD 卡外部存儲目錄,這個目錄位於 SD 卡,應用程序可以隨意讀寫:

getExternalFilesDir(null);

3,SD 卡公共目錄,這些目錄仍然可以訪問,不受許可權限制:

Environment.getExternalStoragePublicDirectory(x)

其中 x 可以是 Environment.DIRECTORY_ALARMS 等預定義的常量。可以查找 Environment 的幫助。

如果大家要存儲數據,可以用 1 或者 2 的方法,獲取正確的目錄,然後進行任意讀寫,這樣不會把 SD 卡的目錄寫亂。


Google 給出的理由有一定的道理——相信很多有潔癖的人都很討厭第三方應用在 SD 卡或者內置存儲下隨意建立文件夾吧,有節操的應用應該只在以自己的包名區分的目錄下存放需要的文件。

至於為什麼只限制 SD 卡,不包括內置存儲,我覺得是因為 SD 卡是可以插在別的地方的,目錄結構是有可能暴露出來的,也有可能被修改。規範應用在 SD 卡的讀寫,可以使得這個 SD 卡上的目錄和文件可以在其他設備上被電腦「理解」——「這個目錄是在某一個 Android 設備上用到的,我不必理會它」,如果第三方應用隨意在 SD 卡根目錄創建命名不規範並且無規律的目錄,這個 SD 卡在其他地方就會使電腦或者人迷惑——「這個目錄是幹什麼的?是誰創建的?我可不可以刪掉它?」。手機的內部存儲空間不能拆卸,所以其目錄結構不會輕易暴露給用戶,也不會放在別的設備上,所以可以暫時不管。

以上只是我的猜測,我是希望能再嚴格一點,把內置存儲也限制了吧。


上面的回答其實都對,也都不對。因為你們沒有考慮SD讀寫對於隱私和安全的威脅。個人認為,真正的原因其實來源於Google對於隱私的擔憂(請注意這句話except in their package-specific directories)。SD卡更乾淨,只是很小的一部分,這個理由不會促使Google做如此大的改動。

SD卡讀寫與安全(劇透下我師弟的最新研究成果,要做這個idea的人可以洗洗睡了)

1. 問題原因(粗粒度的許可權)

SD卡讀許可權太過於簡單:只要獲取到兩個許可權(WRITE_EXTERNAL_STORAGE,READ_EXTERNAL_STORAGE)有些版本連READ_EXTERNAL_STORAGE都不需要,就可以對SD卡進行讀寫。讀寫範圍包括其他APP的文件夾、用戶照片和備份文件和錯誤日誌(當然,也可以改)。

隱私問題也隨之而來。因為SD卡上有很多用戶的信息(雖然不一定敏感)。

2. 後果(請允許我用這個詞)

1)直接敏感信息泄露

目前,手機拍照已經成為趨勢,而且開始擠壓傻瓜相機的存在感。

具體危害,請參照陳(冠希)老師和最近艷照上網的官員們。其實,真實情況跟恐怖。不但照片在SD卡上,你備份的簡訊和聯繫人都在SD卡上面,還有一些下載的照片、APP和音樂等。APP獲取到許可權就可以隨便讀了,沒有彈出窗口,沒有警告。雖然現在360,LBE也對一些敏感位置(照片文件夾)進行了限制,但是不可能面面俱到,而且後面的風險才是殺招

2)間接隱私泄露(通過非敏感信息泄露)

有人會說,SD卡上面沒有照片,簡訊和聯繫人備份,你隨便讀吧。

很抱歉,你又錯了。即使你SD卡上面只有程序文件夾和緩存,也足夠惡意應用「玩死你」。因為,每個人在SD卡上面留下的痕迹也不同(安裝應用導致的文件目錄結構,文件大小,文件目錄建立和修改日期等)。這些東西相當於一個人的「信息指紋」,可以間接的區分用戶和手機(類似文章"為什麼Targe比她老爸更早發現她懷孕[1]"「通過位置信息唯一定義一個用戶[2]」)。別以為這些東西還在紙面上,相關論文已經有了,而且系統也有了,識別率也不低!

PS:這也就是NSA的真正可怕之處(因為他有大量數據[3]),就算沒有直接敏感信息,非敏感信息組合起來也可以把你唯一標識,然後把你的所有信息串起來。偷看你的郵件和數據不可怕,把你所有的資料關聯起來才真正可怕(就像拼圖一樣)。

3. Google的補救

Google的補救有點晚,都已經4.4了。考慮到Android版本的分散性,運行老版本的手機不計其數。等到限制開始生效,估計黃花菜都涼了(黑客或者惡意開發者估計已經獲取了數不清的資料)。另外,正如可以pansz所說。這次限制還不夠徹底。Android 4.4限制了寫,但是讀還是沒有受到影響。

[1] How Target Figured Out A Teen Girl Was Pregnant Before Her Father Did

[2] BBC News - Mobile location data present anonymity risk

[3] Schneier on Security: How to Remain Secure Against the NSA


因為很多應用(尤其國內開發的)喜歡在/sdcard和/sdcard1下一口氣拉好幾坨翔,十分頑固,刪掉它立馬重拉


真的是非常影響使用的一個功能,搞的不root都不能增加讀寫許可權,第一答案說制定目錄可以讀寫,親測並不可以,所以內存卡基本是廢的。

現在內存卡動不動幾十個G,誰在乎目錄亂不亂啊,說的好像放到指定目錄就不亂了一樣。

所以安全沒保障然後我就想放個備份文件、音樂文件都要取得root許可權,不得不說真是日了文明用語了。

root許可權獲取一次那麼艱難,一方面跟用戶說不要root手機,有風險,一方面搞些不得不root才能搞定的東西,精神分裂。

android就不能學習linux的sudo命令?設置用戶密碼臨時提升許可權不就行了,非要一竿子打死,對不起我是為了你們安全,這和我國不讓看草榴不是一個道理么?懶死了吧谷歌也


上面很多朋友說到限制應用在SD卡下面新建目錄的問題,實際上就算是限制了在主儲存建立目錄的許可權,依然不算是一個好方法。

因為在sdcard/Android/data/[應用包名]/下的文件,在程序卸載的時候這會一併被刪除,對於需要大容量持久化的應用比如視頻或者電子書應用,這並不是作者和用戶願意看到的。


打開你的sd卡根目錄,發現一大堆文件夾而且很多都是空的或者裡面只有一些配置文件幾KB的,你就會懂google的做法了


同感,用安卓的原因之一就是文件可以共用,下的小說這個閱讀器不好用我就換一個打開,要是讀寫都獨立了我還不如換回蘋果去。


那我的muisc video這些app怎麼辦?難道要把音樂和視頻放到/data/com.xxxxx這些目錄裡面去??


不再用android了,最大好處都沒了,我電話只8g,本身手機已有4GB不知名的,只有4GB用根本玩多個大型遊戲都不行,不知所謂,感到無奈 32GB sd卡廢了一樣


酷狗怎麼辦?音樂放哪兒?


那我還不如去用水果!


手機迅雷這類軟體怎麼辦?


第一sd卡會影響讀取軟體的速度,當然這取決於sd卡的好壞,多數手機生產商都會選擇廉價的sd卡

第二,sd卡有使用壽命,而且不會很長(當年用過PSP的應該都深有感觸)

第三那就是跟蘋果有關係了,iPhone火了以後別的手機商都爭相效仿做成手機自帶內存了


root用戶可以修改這個許可權,再次證明了root是多麼的不安全,除非特殊需要,大家還是不要root.


推薦閱讀:

Windows Phone 8.1 有比 iOS 7 或 Android 4.4 領先的特性嗎?

TAG:Android44KitKat |