Android 組件安全
1、Activity、Service、BroadcastReceiver、ContentProvider是Android的四大組件,他們的安全性是非常重要的。四大組件的安全性漏洞主要集中在是否可以被外部調用,外部調用是否存在風險。
四大組件是否可以被外部調用,決定因素是在AndroidManifest.xml裡面定義的四大組件的標籤export的布爾值。如下:
export為true,表示PartActivity可以被外部調用。export如果為false,表示PartActivity不可以被外部調用。
我們注意到我們在定義四大組件時,經常是不寫export這個標籤的,那麼系統預設的export是什麼呢?
(1)、如果四大組件包含intent-filter,那麼Android系統認為這個組件可以被外部通過隱式調用,所以預設export為true。
(2)、如果四大組件不包含intent-filter,那麼Android系統認為這個組件值只可以被內部通過顯式調用,所以預設export為false。
2、為了增加四大組件的安全,可以定義訪問某個組件需要某個許可權。
android:permission=com.example.test.permission
如果需要使用必須在AndroidManifest.xml,通過申請許可權可以,另外也要注意protectionLevel,如果是Signature,那麼只有和這個應用使用相同私密金鑰簽名的應用才可以申請這個許可權。
3、Intent啟動不同組件的方法如下:
組件名稱 |
方法名稱 |
Activity |
startActivity() startActivityForResult() |
Service |
startService() bindService() |
Broadcasts |
sendBroadcast() sendOrderedBroadcast() sendStickyBroadcast() |
sendBroadcast,有一個方法,可以不用在AndroidManifest.xml裡面聲明,uses-permission;直接發送時附帶許可權,sendBroadcast(intent, receiverPermission)。動態註冊的receiver可以在代碼中指定需要訪問它所需要的許可權。
4、ContentProvider安全
需要讀contentProvider時,要申請readPermission,需要寫contentProvider時,需申請writePermission。