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