概述
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安全字段
网友评论