Android 安全提示 笔记
?
http://developer.android.com/training/articles/security-tips.html
1.數據存儲
內部存儲
internal storage存儲的數據,只能由App自己訪問。
如果是敏感數據,推薦使用KeyStore。
外部存儲
外部存儲,例如SD卡,任何app都可以讀寫,也可以被用戶移除,所以不能用來存儲敏感數據。
如果處理來自外部存儲的數據,必須要做驗證。
強烈建議不要存儲可執行文件,或者用于動態加載的類文件。如果一定要這么做,這些文件必須簽名并加密。
Content Provider
他提供了一種結構化的存儲機制來限制自己的app或者其他app訪問限定的內容,
如果你不打算讓其他的app訪問你的content provider,設置android:exported=false
如果創建了Content Provider給其他app使用,必須指明相應的權限。
如果使用content provider在幾個app之間共享數據,需要android:protectionLevel =signature
2.權限
請求權限
盡可能的減少請求的權限,例如數據保存在內部存儲區而不是保存在外部存儲區。
創建權限
盡量少定義一些權限。
如果定義權限,必須有一個字符串明確的告訴用戶做了什么,字符串必須翻譯,用戶可以拒絕這個要求而不安裝app。
3.網絡
IP網絡
因為移動設備經常頻繁的連接沒有加密的網絡,例如公共Wi-Fi熱點,所以推薦使用Https而不是Http。
http訪問推薦使用HttpsURLConnection,Socket訪問,推薦使用SSLSocket。
App使用localHost來處理進程間通訊,這種方式并不推薦,因為可以被其他app利用。最好使用Service。
不要信賴http或者其他非安全協議下載的數據。
移動數據
不要用短信來存儲或者傳遞敏感數據,因為其他App可以讀取短信。
4.驗證輸入
如果使用native code,從網絡、其他進程傳過來的數據都可能引入安全問題。
注意訪問script或者sql 注入攻擊。
5.處理用戶數據
盡量避免存儲或者傳輸用戶敏感的數據,例如email.
如果需要訪問用戶名密碼之類的信息,可能需要提供隱私保護策略給用戶。
請不要暴露敏感數據給第三方不信任的App。
如果需要GUID,自己創建一個,不要使用IMEI或者手機序列號。
慎重使用設備log,log也是一種共享資源,其他App可以請求Read_Logs權限來訪問log。
6.WebView
webView會加載HTML和Javascript,可能引入跨站點攻擊。如果不需要使用javascript,請不要調用setJavaScriptEnabled().
addJavaScriptInterface() 最好只給自己的App使用。
如果使用webView訪問了敏感數據,記得清理緩存。
7.憑據
盡量不要向用戶請求Credentials。
如果可能的話,盡量不要在設備上存儲用戶名和密碼,推薦使用短期有效的token。
使用AccountManager來處理一些憑據信息,或者Keystore,Keychain。
8.加密
如果需要自定義加密算法,推薦使用系統的AES胡總和RSA
9.進程間通信
推薦使用Intent,Binder,Messenger,Servier,BroadCast,而不是傳統的linux技術實現。
10.Intent
如果Intent傳遞的數據包含敏感信息,需要制定權限,保證擁有權限的app可以接收。
11.Service
默認情況下,Service不要export,不要被其他App調用。
如果需要,請加上權限,
調用之前,可以用 checkCallingPermission() 檢查一下
12 binder and messenger
定義權限和接口
13. broadcast receiver
這個可以被任何一個app調用,注意定義權限
14 動態加載代碼
強烈建議不要從外部動態加載代碼,如果需要,請簽名并使用DexClassLoader.。
15 虛擬機安全
不推薦動態加載代碼
16 Native Code
盡量使用Android SDK,實在不行,使用Android NDK。
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Android 安全提示 笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java-类库:JNA(Java Nat
- 下一篇: Android 开发中常用小技巧