我正在使用Intent在新任務中啓動新的活動。該意圖在其附加內容中包含該活動所需的一些私人數據。這些數據不應該被其他應用程序讀取。 我們調查了這些數據是否確實沒有泄露。我們發現通過使用getRecentTasks()中的RecentTaskInfo,這個額外的數據可以被任何具有GET_TASK權限的任意應用程序讀取。 這不是很安全。 我們發現此泄漏後,我們停止搜索。有更多的方式泄露這些數據嗎? 而且,我如何確保額外的數據不可被其他應用程序讀取?保護Android中的額外數據意圖
回答
這種意向攜帶其額外
爲什麼由活動需要一些私人數據?將標識符傳遞給專用數據(以附加形式),將這些標識符解析爲專用數據(例如數據庫查詢)只能由活動完成。
我們發現,通過使用RecentTaskInfo從getRecentTasks()這個額外的數據是由具有GET_TASK許可
是的,我blogged about this兩年前任意應用程序讀取,和其他人可能沒有連在那之前。
有沒有更多的方式泄露這些數據?
所有啓動其他組件的請求都是通過OS進程進行的,所以數據一直被「泄漏」到OS中。
而且,根據您對Intent
所做的操作,您可能會以其他方式泄漏它(例如,將Intent
本身作爲Parcelable
傳遞給其他應用程序)。
而且,如何確保額外的數據不能被其他應用程序讀取?
你不行。同樣,不要將私人數據放在活動附加資料中,而是使用可用於獲取私人數據的標識符。
您有專用的存儲空間,只有您的應用程序才能讀取。在無根的設備上,您存儲的信息只能在您的應用中使用。
您可以使用SharedPreference來存儲您的數據 - 數據存儲在應用程序的指定專用存儲中。
或者,你可以在那裏直接使用私有存儲設備和電線任意文件是這樣的:
FileOutputStream fos;
try {
fos = openFileOutput (FILENAME, Context.MODE_PRIVATE);
fos.write (string.getBytes());
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
於Android 4.1.1開始加入額外的權限來保護額外就是BEING通過使用第三方應用程序讀取RecentTaskInfo
。此權限(android.Manifest.permission.GET_DETAILED_TASKS
)只能由系統獲取。沒有此許可,多餘的將在baseIntent
通過RecentTaskInfo
返回之前被換出。
添加新的簽名級別的權限來獲得任務的細節。
第三方應用程序現在無法訪問與任務關聯的意圖 的附加內容,以防止其中的私人數據泄漏。
更改ID:I95af9e181ac42557bc8b981807e7ddd266a88d0e
如此看來,努力正在投入製作意圖額外的安全傳輸敏感信息。我不知道是否還有其他的方法可以泄漏這些額外的東西,但是至少額外的東西從JB上可以看出來。
嗯,這當然很酷。我將不得不進一步調查。謝謝! – CommonsWare 2013-03-19 14:27:00
- 1. 的android:如何閱讀意圖URI額外的數據
- 2. android意圖額外的數據檢索問題
- 3. 針對Android意圖的額外文檔
- 4. Android廣播通知NullPointerException意圖額外
- 5. 意圖額外的方法?
- 6. 對意外資源組刪除的azure數據庫的保護
- 7. Android許可額外數據
- 8. 在logcat中顯示的意圖額外
- 9. 意圖沒有額外
- 10. Android快捷方式[在shortcuts.xml中傳遞意圖額外(或某些數據)]
- 11. 我可以爲整個應用程序獲取Android意圖額外數據嗎
- 12. 從3個活動之間的意圖保存額外
- 13. CLEAR_TOP並保存額外的意圖字段
- 14. 把2個額外的意圖
- 15. 保護Oracle外部表數據文件
- 16. Rails燈具似乎正在添加額外的意外數據
- 17. Rails:保護模型(批量分配)中的額外領域?
- 18. 定時器和IDisposable - Dispose中的額外保護?
- 19. Android。如何保護你的數據庫?
- 20. 圖表 - 有額外的數據
- 21. android:從意圖額外獲得相同的值
- 22. Android繼續緩存我的意圖額外,如何聲明一個掛起的意圖,保持新鮮的額外?
- 23. 保存額外的聯繫人數據的數據存儲
- 24. 無法檢索意圖額外
- 25. 獲取意圖額外和onCreate方法?
- 26. 意圖不會重置額外
- 27. 服務不收到意圖/額外
- 28. 無法從意圖獲得額外
- 29. 如何更新保存的文檔中GridFS的額外數據
- 30. 份額使用意圖Facebook在Android的
雖然我同意你的解決方案可以使用(順便說一下,它將適用於「所有」API級別),但似乎更新版本的Android實際上解決了您的博客中描述的問題。檢查我在我的答案中鏈接的提交。 – baske 2013-03-19 14:19:24
我可以接受操作系統能夠讀取我的數據,問題出在非操作系統應用程序。如果我正確解釋您的解決方案,這意味着設置一個ContentProvider。這只是將安全問題轉移到不同的位置:如何確保查詢僅在預期活動訪問時返回答案?當多個應用程序需要向他們發送安全信息時,我不會將權限看作是可行的解決方案,但他們不允許看到其他信息。 – user2186703 2013-03-20 09:01:54
@ user2186703:「如果我正確解釋您的解決方案,這意味着設置ContentProvider」 - 否。具有標識符的數據概念(如數據庫表中的主鍵)已經存在了數十年。由於Android幾十年來一直沒有出現,所以有些方法可以使用標識符來查找數據,而不使用像「ContentProvider」這樣的Android特定結構。所以,通過「標識符」,我指的是數據庫表的鍵,或者你的'HashMap'的鍵,或者CSV表的行號,或者你的'JSON'對象的鍵。 – CommonsWare 2013-03-20 11:56:14