如何修复UnsafeProtectedBroadcastReceiver?

时间:2018-10-03 14:01:00

标签: android android-studio security

跟随我的BroadcastReceiver:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
       // my code
    }
}

它已在AndroidManifest中注册:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<receiver android:enabled="true"
            android:name=".MyBroadcastReceiver">
            <intent-filter>
                <action android:name="android.intent.action.DATE_CHANGED" />
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
</receiver>

lint在MyBroadcastReceiver的onReceive方法中报告以下错误:

  

此广播接收器声明了受保护对象的意图过滤器   广播操作字符串,只能由系统发送,不能发送   第三方应用程序。但是,接收者的onReceive方法   似乎没有调用getAction来确保接收到的Intent   操作字符串与期望值匹配,有可能使之匹配   另一个演员可能不采取任何行动就发送了欺骗意图   字符串或其他操作字符串,并导致不良行为。   广播接收器,它声明了一个意图过滤器   保护广播操作字符串必须检查接收到的   意向的操作字符串与期望值匹配,否则为   恶意行为者有可能欺骗意图。

     

问题ID:UnsafeProtectedBroadcastReceiver

如何修复UnsafeProtectedBroadcastReceiver?

1 个答案:

答案 0 :(得分:8)

按照操作说明过滤操作:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        switch (intent.getAction()) {
            case Intent.ACTION_DATE_CHANGED:
                //what you want to do
                break;
            case Intent.ACTION_BOOT_COMPLETED:
                //what you want to do
                break;
        }
    }
}

如果不进行检查,则任何应用程序都可以通过指定类名在接收器上“调用” BOOT_COMPLETED,因为这会绕过过滤器。