編輯:關於Android編程
Android提供了幾種保存持久化應用數據的選擇,其中之一就是外部存儲(/sdcard, /mnt/sdcard)。外部存儲包括設備內部的微型或標准大小的SD卡,掛載到PC上的Android設備存儲卡以及Android/obb目錄。
Android4.1之前的版本,存放在外部存儲的文件是world-readable(能夠被任何用戶讀取的)和world-writable(能夠被任何用戶寫入)。從Android4.1到Android4.3,一個app想要寫入外部存儲的任意文件時,只需在AndroidManifest文件中聲明WRITE_EXTERNAL_STORAGE權限。但從Android4.4開始,引入了基於目錄結構創建分組和文件模式,這使得一個app在外部存儲中的只能在以自己包名命名的目錄下才具有文件的讀寫權限。非系統級的app只允許在Android/data/
上面描述的訪問權限限制的不足,導致寫入到外部存儲的文件可能存在被同一設備上不同的app修改和讀取的風險(Android4.4之前版本)。
Android API指南[Android Guild 2013]關於Storage Options給出了如下的警告信息:如果用戶將外部存儲掛載到PC上或者直接移除了,會導致外部存儲不可用,而且沒有安全措施保證存放在外部存儲上的文件。所有的應用都可以讀寫存放在外部存儲的文件,而且用戶可以隨意刪除它。
開發者不應該在外部存儲中存放未加密的敏感信息,因為外部存儲的文件不能保證可用性,完整性和保密性。
[不符合安全要求的代碼示例]
下面的代碼在外部存儲中創建一個文件,並保存了敏感的信息。
private String filename = myfile private String string = sensitive data such as credit card number FileOutputStream fos = null; try { file file = new File(getExternalFilesDir(TARGET_TYPE), filename); fos = new FileOutputStream(file, false); fos.write(string.getBytes()); } catch (FileNotFoundException e) { // handle FileNotFoundException } catch (IOException e) { // handle IOException } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { } } }
[概念驗證]
一個應用一般存放在外部存儲的文件目錄結構如下所示:
/sdcard/Android/data/com.company.app/files/save/appdata/save_appdata
[符合安全要求的解決方案#1 將文件保存到內部存儲中]
下面的代碼使用openFileOutput()方法在應用的data目錄中創建“myfile”文件,並將訪問權限設置為MODE_PRIVATE,這樣保證其他app訪問不了該文件。
private String filename = myfile private String string = sensitive data such as credit card number FileOutputStream fos = null; try { fos = openFileOutput(filename, Context.MODE_PRIVATE); fos.write(string.getBytes()); fos.close(); } catch (FileNotFoundException e) { // handle FileNotFoundException } catch (IOException e) { // handle IOException } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { } } }
[符合安全要求的解決方案#2]
在將文件保存到外部存儲之前,先對文件內容進行加密。
——歡迎轉載,請注明出處 http://blog.csdn.net/asce1885 ,未經本人同意請勿用於商業用途,謝謝——
一、為何寫作此文??你是不是經常看到很多書籍中說:不能在子線程中操作ui,不然會報錯。你是不是也遇到了如下的疑惑(見下面的代碼):@Override prote
大家好,由於最近會有對智能硬件相關的開發需求,所以最近這些天分享的博文也就大致掛鉤智能硬件了,像上一篇的藍牙分享,相信很多讀者已經看過了,那麼今天我為大家帶來Androi
現在越來越多的應用開始重視流暢度方面的測試,了解Android應用程序是如何在屏幕上顯示的則是基礎中的基礎,就讓我們一起看看小小屏幕中大大的學問。這也是我下篇文章&mda
Android 自定義布局實現氣泡彈窗,可控制氣泡尖角方向及偏移量。效果圖實現首先自定義一個氣泡布局。/** * 氣泡布局 */public class BubbleRe