【问题标题】: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/…。以谷歌为例

标签: android android-permissions android-broadcast android-broadcastreceiver


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 2017-12-22
    • 1970-01-01
    • 2016-09-06
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多