Как исправить UnsafeProtectedBroadcastReceiver? - PullRequest
0 голосов
/ 03 октября 2018

После моего 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>

Линтер сообщает о следующей ошибке в методе onReceive MyBroadcastReceiver:

Этот широковещательный приемник объявляет фильтр намерений для защищенной строки действия широковещания, который может отправлять только система, а не сторонние приложения.Тем не менее, метод onReceive получателя, по-видимому, не вызывает getAction, чтобы гарантировать, что строка действия полученного намерения соответствует ожидаемому значению, потенциально позволяя другому субъекту отправлять поддельное намерение без строки действия или другой строки действия и вызывать нежелательное поведение,BroadcastReceivers, которые объявляют фильтр намерений для строки действия защищенной трансляции, должны проверить, соответствует ли строка действия полученного намерения ожидаемому значению, в противном случае злоумышленники могут подделать намерения.

Идентификатор проблемы: UnsafeProtectedBroadcastReceiver

Как исправить UnsafeProtectedBroadcastReceiver?

1 Ответ

0 голосов
/ 03 октября 2018

Отфильтруйте действие, как оно говорит:

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 на вашем Receiver, просто указав имя класса, так как это обходитфильтр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...