如何修复不受保护的SMS BroadcastReceiver lint警告

时间:2016-03-21 09:41:15

标签: android broadcastreceiver intentfilter android-permissions android-lint

我的应用需要能够接收短信。一切正常,但我得到了这个lint警告:

  

为SMS_DELIVER或者声明intent-filter的BroadcastReceivers   SMS_RECEIVED必须确保调用者具有BROADCAST_SMS   许可,否则恶意攻击者可能会欺骗   意图。

如何“确保调用者具有BROADCAST_SMS权限”?

在我的清单中我有:

<uses-permission android:name="android.permission.RECEIVE_SMS" />
<application ...>
    <receiver
        android:name=".SmsReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter android:priority="1000">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>
</application>

我的代码:

public class SmsReceiver extends BroadcastReceiver {
    public SmsReceiver() {}

    @Override
    public void onReceive(final Context context, final Intent intent) {

        final Bundle bundle = intent.getExtras();
        if (bundle != null) {
            final Object[] pdusObj = (Object[]) bundle.get("pdus");
            for (int i = 0; i < pdusObj.length; i++) {
                final SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                // use currentMessage
            }
        }
    }
}

1 个答案:

答案 0 :(得分:23)

android:permission="android.permission.BROADCAST_SMS"添加到开始<receiver>代码。

此外,默认情况下会启用组件,而<intent-filter>会将其导出,因此您并不需要明确包含这些属性。

<receiver
    android:name=".SmsReceiver"
    android:permission="android.permission.BROADCAST_SMS">