2012-02-11 107 views
83

我想知道共享偏好安全性。Android SharedPreference安全性

是否可以訪問sharedpreferences,即使它們是在MODE_PRIV(0)中創建的?
是否可以列出所有可用的共享首選項,然後從其他應用程序獲取所有設置?
sharedpreferences是放置敏感數據的好地方,例如密碼或身份驗證令牌?

感謝

+0

可能的重複[Android安全嗎SQLite和SharedPreferences文件?](http://stackoverflow.com/questions/3608883/how-secure-are-sqlite-and- sharedpreferences-files-on-android) – 2012-02-11 21:52:22

回答

185

共享偏好創建是申通快遞紅色作爲設備文件系統中的文件。默認情況下,它們存儲在應用程序的數據目錄中,其文件系統的權限設置爲只允許運行特定應用程序的UID訪問它們。所以,它們是私有的,因爲Linux文件許可限制了它們的訪問權限,就像在任何Linux/Unix系統上一樣。

任何具有根級別訪問權限的設備都能夠看到它們,因爲root可以訪問文件系統上的所有內容。此外,任何與創建應用程序使用相同UID運行的應用程序都可以訪問它們(這通常不會完成,您需要採取特定的操作才能使兩個應用程序以相同的UID運行,所以這可能不是一個大的關心)。最後,如果有人能夠在不使用已安裝的Android OS的情況下裝載設備的文件系統,他們也可以繞過限制訪問的權限。

如果您擔心對您的偏好設置(或您的應用程序編寫的任何數據)的訪問權限,那麼您需要對其進行加密。如果你關心他們,你將需要弄清楚你所看到的風險水平需要多少保護。有關這方面的廣泛討論Application Security for the Android Platform,剛剛在2011年12月出版(免責聲明:我是本書的作者)。

+2

+1這是一個很好的答案:簡潔而翔實。謝謝! – 2014-06-17 07:16:14

+2

有沒有關於這方面的官方文檔?你有任何參考? – clu 2016-07-05 18:46:32

10

通常情況下,不,他們不能被其他應用程序訪問,但是,你應該注意的是SharedPreferences存儲作爲/data/data/目錄,這基本上意味着XML文件任何應用與超級用戶權限一個紮根設備上可以訪問您的SharedPreference S,即使他們與MODE_PRIV

19

SharedPreferences都不過是在你的手機/數據/數據/文件夾中的XML文件,因此,任何應用程序或用戶與植根設備上的超級用戶的privilages可以訪問你的SharedPreferences,即使他們與MODE_PRIV

不過創建有一種方法來保護它從大家... 請檢出此鏈接。 在這裏你可以將數據存儲在pref加密中,這個類是自解釋的並且非常易於使用。

https://github.com/sveinungkb/encrypted-userprefs

至於說其他人任何人都可以訪問它,但在這種情況下,因爲它是加密的任何人都無法讀取裏面的數據。所以它的安全性。對於最高安全性,我的建議是在運行時生成用於加密的密鑰,而不是對其進行硬編碼。有很多方法可以做到這一點:)

+3

那麼你如何保存生成的密鑰? – Olayinka 2015-11-27 04:42:47

+1

@Olayinka用另一個密鑰對它進行加密並將其保存在'SharedPref'中會更安全。但那麼,如何處理另一個關鍵?說真的,最好的方案是將加密密鑰和設備UID發送到使用SSL的服務器,並存儲在那裏並根據需要進行檢索。這將需要連接性,但會允許您將設備列入黑名單,並突然刪除所有數據。沒有固定的互聯網連接,任何嘗試加密數據都不是100%安全的。 – 2016-02-05 18:35:14

+0

我使用上述解決方案...它工作9出10次..但我得到錯誤:1e06b065:密碼功能:EVP_DecryptFinal_ex:BAD_DECRYPT「有時..任何人有一個想法? – 2017-03-13 14:23:30