概述
Activity / Service / BroadcastReceiver / ContentProvider 的 export 設置爲 true 時,攻擊者可以向這些組件發送畸形 Intent 。
<activity android:name=".demo.DemoActivity"
android:export="true"
....
危害
攻擊者可以輕易地向Activity等發送自己的 Intent ,如果 Intent 攜帶空數據,或則畸形數據等,如果 Activity 內部處理接收到的 Intent 沒有進行格式格式校驗或者異常捕獲,造成程序崩潰。
class DemoActivity extends BaseActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
Intent data = getIntent();
String name = data.getStringExtra("name");// 攻擊者發送 data == null 時,會造成程序 NullPointer
}
}
防範
- 僅僅程序內部使用的 Activity 等設置 export 爲 false
- 處理 Intent 數據時,進行 try-catch 防止數據格式異常
class BaseReceiver extends BroadcastReceiver{
public final void onReceive(Context context, Intent intent){
if( context != null && intent != null) {
try {
String action = intent.getAction();
if("com.demo.test".equlals(action)){
String name = intent.getStringExtra("name");
//...
}
}catch(Throwable t){
t.printStackTrace();
return;
}
}
}
}
- 如果export爲true,添加permission安全字段