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

private broadcast sender and receiver permissions

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

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

我正在使用以下代码片段动态注册广播接收器。

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 中定义私有权限并在此处使用它?

Do I need to define the private permission in the AndroidManifest.xml and use it here?

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

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

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

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

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