Activity
-
AndroidMainfest
配置android:exported="false"
, 其它應用不可以調(diào)用 - 檢測棧頂
Activity
, 防止頁面被劫持 -
WebView
加載網(wǎng)頁發(fā)生證書認證錯誤時, 會調(diào)用WebViewClient
類的onReceivedSslError
方法, 如果該方法實現(xiàn)調(diào)用了handler.proceed()
來忽略該證書錯誤, 則會受到中間人攻擊的威脅, 可能導致隱私泄露。當發(fā)生證書認證錯誤時, 采用默認的處理方法handler.cancel()
, 停止加載頁面
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new JsBridge(mContext), JS_OBJECT);
mWebView.loadUrl("http://www.xxxx.com/");
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // 忽略SSL證書錯誤(錯誤做法)
handler.cancel(); // 停止加載頁面(正確做法)
}
});
-
WebView
檢查是否明文保存密碼, 使用WebView.getSettings().setSavePassword(false)
來禁止保存密碼 -
WebView
檢測是否使用addJavascriptInterface
接口, 如果使用了需要將minSdkVersion
提升至17 (Android 4.2)
, 或者使用一些第三方的庫來解決注入漏洞
BroadcastReceiver
- 使用
LocalBroadcastManager
處理應用內(nèi)部的廣播 - 應用間使用廣播, 通過自定義權(quán)限和設(shè)置
android:protectionLevel
, 同時要避免敏感數(shù)據(jù)的傳遞 - 不要使用
sendStickyBroadcast
、sendStickyXXX
等Android SDK
文檔中明確說明了存在安全問題的API
Service
-
AndroidMainfest
配置android:exported="false"
, 其它應用不可以調(diào)用 - 通過
Intent.getXXXExtra()
獲取數(shù)據(jù)時進行以下判斷, 以及用try catch
捕獲所有異常, 以防止應用出現(xiàn)拒絕服務漏洞
- 空指針異常
- 類型轉(zhuǎn)換異常
- 數(shù)組越界訪問異常
- 類未定義異常
- 其他異常
ContentProvider
- 定義了私有權(quán)限, 但是沒有定義私有權(quán)限的級別, 或者定義的權(quán)限級別不夠, 導致惡意應用只要聲明這個權(quán)限就能夠訪問到相應的
Content Provider
提供的數(shù)據(jù), 造成數(shù)據(jù)泄露 - 當
Content Provider
的數(shù)據(jù)源是SQLite
數(shù)據(jù)庫時, 如果實現(xiàn)不當, 而Provider
又是暴露的話, 則可能會引發(fā)本地SQL
注入漏洞 - 防止目錄遍歷漏洞, 去除
Content Provider
中沒有必要的openFile()
接口, 過濾限制跨域訪問, 對訪問的目標文件的路徑進行有效判斷 - 正確的定義私有權(quán)限
<permission android:description="string resource"
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permissionGroup="string"
android:protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"] />
android:protectionLevel
參數(shù)說明
屬性 | 描述 |
---|---|
normal |
默認值, 低風險權(quán)限, 在安裝的時候, 系統(tǒng)會自動授予權(quán)限 |
dangerous |
高風險權(quán)限, 如發(fā)短信, 打電話, 讀寫通訊錄。使用此 protectionLevel 來標識用戶可能關(guān)注的一些權(quán)限。Android 將會在安裝程序時, 警示用戶關(guān)于這些權(quán)限的需求 |
signature |
簽名權(quán)限, 當應用程序所用簽名與聲明引權(quán)限的應用程序所用簽名相同時, 才能將權(quán)限授給它 |
signatureOrSystem |
除了具有相同簽名的 APP 可以訪問外, Android 系統(tǒng)中的程序也有權(quán)限訪問 |
我的博客即將搬運同步至騰訊云+社區(qū),邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=593nbbkwdbbe