如何修复未受保护的 SMS BroadcastReceiver lint 警告
Posted
技术标签:
【中文标题】如何修复未受保护的 SMS BroadcastReceiver lint 警告【英文标题】:How to fix Unprotected SMS BroadcastReceiver lint warning 【发布时间】:2016-07-07 18:03:06 【问题描述】:我的应用需要能够接收 SMS 消息。一切正常,但我收到此 lint 警告:
为 SMS_DELIVER 或声明意图过滤器的广播接收器 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】:将android:permission="android.permission.BROADCAST_SMS"
添加到开头的<receiver>
标记。
此外,组件默认启用,<intent-filter>
将其导出,因此您实际上不需要显式包含这些属性。
<receiver
android:name=".SmsReceiver"
android:permission="android.permission.BROADCAST_SMS">
【讨论】:
为什么需要这个权限? @UnKnown<receiver>
上的permission
属性指定广播的发送者 必须拥有哪个权限才能广播到您的@987654327 @。这是一种安全措施;在这种情况下,您可以相对确定系统是谁在发送SMS_RECEIVED
广播。它不是严格要求的,但如果它不存在,lint 会抱怨。以上是关于如何修复未受保护的 SMS BroadcastReceiver lint 警告的主要内容,如果未能解决你的问题,请参考以下文章
SSH 密钥未受保护的 terraform ansible jenkins
OpenSSH Windows - AWS“eb ssh”导致“警告:未受保护的密钥文件!”
854GB!未受保护的MongoDB泄露2.02亿中国求职者简历