私人广播发送者和接收者权限

Posted

技术标签:

【中文标题】私人广播发送者和接收者权限【英文标题】:private broadcast sender and receiver permissions 【发布时间】:2016-09-04 21:06:20 【问题描述】:

我最近使用 HPFortify 服务对我的 android 源代码进行了代码扫描。他们报告了有关广播接收器和发送器之一的安全漏洞。广播发送者和接收者在应用程序内部,意图不发送到应用程序外部。这些主要用于内部通信。 HPFortify 建议使用广播者权限来减少攻击向量。这样你就限制了广播器,否则任何恶意应用程序都可以发送意图,广播接收器将处理它。同样,他们建议使用接收者权限,以便目标接收者接收广播的意图。此广播器和接收器在应用程序内部,其他应用程序不使用此意图。 这是我的广播公司的实际代码:

 Intent updatedIntent = new Intent("SOME-ACTION");
 Context context = getAppContext();
 context.sendBroadcast(updatedIntent);

我正在使用以下代码 sn-p 动态注册广播接收器。

this.registerReceiver(updatedReceiver,
new IntentFilter("SOME-ACTION"));

HPFortify 建议使用带有权限字符串示例的sendBroadcast

Intent updatedIntent = new Intent("SOME-ACTION");
Context context = getAppContext();
context.sendBroadcast(updatedIntent, "SOME-PERMISSION");

广播接收器也是如此:

this.registerReceiver(updatedReceiver,
    new IntentFilter("SOME-ACTION"),
    "SOME-PERMISSION", null);

我不确定如何定义此权限并在广播器和广播接收器中使用它。是否需要在AndroidManifest.xml中定义私有权限并在这里使用?

【问题讨论】:

您在使用 LocalBroadCastManager 吗?本地广播管理器阻止其他应用程序向您的应用程序发送广播意图。屈膝的 android 开发者 dot com。 " 其他应用程序无法将这些广播发送到您的应用程序,因此您不必担心存在它们可以利用的安全漏洞。" 我需要定义任何权限还是可以直接使用这个类? 根据我和android网站:-)。如果您使用的是 localbroadcastmanager ,则无需定义权限。 developer.android.com/reference/android/support/v4/content/…。以谷歌为例 【参考方案1】:

如果您需要在应用程序内广播,请使用 LocalBroadCastManager,因为本地广播管理器永远不会在当前进程之外发送广播意图。

如果您希望其他应用程序能够接收或发送您的广播,请使用 BroadCastManager 并且您需要申请使用权限(自定义用户权限)。

有关更多信息,请参阅下面的 Android 广播接收器文档,它们在安全部分提供了有关安全性的详细信息。

http://developer.android.com/reference/android/content/BroadcastReceiver.html

【讨论】:

【参考方案2】:

需要在AndroidManifest.xml中定义私有权限并在这里使用吗?

是的。权限始终必须在清单中定义。否则 Android 无法知道该权限使用哪个保护级别。

【讨论】:

如果我使用LocalBoadCastManager,是否还需要使用权限? @F43nd1r 仅当您想跨应用程序发送广播时才需要权限。 developer.android.com/reference/android/content/… 在安全部分指定。

以上是关于私人广播发送者和接收者权限的主要内容,如果未能解决你的问题,请参考以下文章

Git克隆私人仓库,权限被拒绝

如何向 Facebook 用户发送私人消息?

Laravel 使用 Socket.io 广播到私人频道

私人聊天应用程序 - Parse 和 Swift

四大组件之BroadcastReceiver-使用权限和常用的系统广播

订阅身份验证数据中的密钥无效,类型:websocketError