南通Android開發(fā)培訓(xùn)的最新課程
87 2020-04-16
南通Android開發(fā)培訓(xùn)的最新課程 Android系統(tǒng)主要由Activity、Service、Content Provider和Broadcast Receiver四大基本組件構(gòu)成。面向組件的設(shè)計帶來了Android應(yīng)用程序的靈活性和開放性,但是也帶來了負面影響——缺乏安全性。組件的安全直接影響到整個應(yīng)用程序乃至Android系統(tǒng)的安全。
作為應(yīng)用程序的表示層,Activity的安全性和權(quán)限息息相關(guān)。設(shè)置Activity啟動所要的權(quán)限時,需要在AndroidManifest.xml中為指定的Activity添加permission屬性。比如,要為一個 Activity 設(shè)定 START_MY_ACTIVITY 權(quán)限,manifest文件中應(yīng)該有如下定義:
<manifest< span="" style="word-break: break-all; margin: 0px; padding: 0px;">
Package="com. sample.sampleapps.sample1">
<activity< span="" style="word-break: break-all; margin: 0px; padding: 0px;">
android:permission="com.sample.sampleapps.samplel.permission.START_MY_ACTIVITY"〉
……
以上定義可以有效地防止應(yīng)用程序在缺少START_MY_ACTIVITY權(quán)限的情況下啟動MyActivity。如果一個應(yīng)用想啟動MyActivity,除了必須具備START_MY_ACTIVITY權(quán)限以外,還需要創(chuàng)建一個Intent對象來定義必要的特性,然后調(diào)用Context.startActiviy()或 Activity.startActivityForResult() 實現(xiàn)啟動MyActivity。如果調(diào)用成功,MyActivity 才能被啟動。如果應(yīng)用程序沒有被授予START_MY_ACTIVITY權(quán)限,兩個調(diào)用都會失敗并拋出一個SecurityException異常。另外,啟動Activity時,如果應(yīng)用程序已知所需啟動的Activity名稱,最好通過intent中定義的setComponent()方法調(diào)用這個Activity,這樣可以防止系統(tǒng)在響應(yīng)intent時,誤啟動其他的Activity。此外,密碼等敏感信息不能放置于啟動Activity的intent中,否則很容易被攻擊者利用。
Service的安全性同樣可以通過權(quán)限檢測方式來提供保障。由于Service執(zhí)行的操作比較敏感,涉及更新數(shù)據(jù)庫、提供事件通知等操作,因此一定要確保訪問Service的組件具備適當(dāng)?shù)臋?quán)限。此外,如果訪問Service的應(yīng)用程序中含有密碼等敏感信息,那么也需要對Service的安全性進行驗證,以防止帶有攻擊性的Service損害私有信息。保險的做法是,不要輕易把Intent傳遞給一個公有的、未知名的Service。
與Activity、Service組件暴露的問題相比,Content Provider暴露的安全后果更嚴(yán)重。首先,它更容易暴露。Activity、Service組件只有響應(yīng)intent或在manifest中設(shè)置了android:exported屬性為true時才對外暴露。而Provider在早期的Android(Android 4.2)版本中直接就是對外暴露的。其次,它暴露的后果可能更嚴(yán)重,Activity、Service組件暴露后,第三方的應(yīng)用只是調(diào)用這些組件,執(zhí)行其入口點代碼。而Provider暴露后,第三方應(yīng)用不僅可以直接讀取或修改它所管理的數(shù)據(jù),甚至可以向其中寫入惡意的數(shù)據(jù),這樣攻擊者就可能通過精心構(gòu)造的數(shù)據(jù)來控制應(yīng)用的運行。與Activity、Service組件暴露問題的解決方法相似,Provider暴露的主要解決方法也是設(shè)置自定義權(quán)限,只是在具體方法上有所不同。
南通Android開發(fā)培訓(xùn)的最新課程 首先,如果Provider不需要提供給其它應(yīng)用訪問,則只需要在manifest中將android:exported的屬性設(shè)置為false即可。其次,如果需要將Provider提供給同一團隊開發(fā)的其它應(yīng)用訪問,可以在manifest中設(shè)置signature級別的自定義權(quán)限,并且可以對讀取和寫入兩種操作分別設(shè)置不同的權(quán)限。最后,如果需要將Provider提供給第三方應(yīng)用訪問,除了直接暴露,還可以細粒度的對每個URI設(shè)置訪問權(quán)限,這個權(quán)限可以通過在manifest中為Provider添加grant-uri-permission標(biāo)簽來實現(xiàn)。
掃一掃
獲取更多福利
獵學(xué)網(wǎng)企業(yè)微信
獵學(xué)網(wǎng)訂閱號
獵學(xué)網(wǎng)服務(wù)號