PendingIntent.getBroadcast()安全问题?

时间:2016-05-02 18:02:06

标签: android android-intent android-pendingintent

我正在查看PendingIntent.getBroadcast(Context, int, Intent, int)的{​​{3}},它提到了......

  

出于安全原因,您在此处提供的Intent几乎总是一个明确的意图,即指定通过Intent.setClass传递给它的显式组件

安全原因究竟是什么?如果其他应用程序仍然可以仅使用您的包名称和组件名称创建一个,那么是什么使显式Intent更安全?

我在NIST.gov上看到有关基于PendingIntent的{​​{3}}的报告影响了所有的Android 4.x,其中恶意应用可以发送Intents作为SYSTEM用户。但是,我不确定相同的问题是否适用于我的应用。

如果Intent处理BroadcastReceiver并且Intent未用于传递数据(例如,作为额外内容),是否还存在风险?

1 个答案:

答案 0 :(得分:3)

我猜他们的真正含义是:

  

出于安全原因,您在此处提供的Intent几乎总是明确Intent 指向未导出的组件,即指定要通过Intent传递的显式组件.setClass

您对“其他应用程序仍可以仅使用您的软件包名称和组件名称创建一个”的关注仅在导出组件时有效。对于BroadcastReceiver,默认情况下,只有<intent-filter>(或IntentFilter,如果通过registerReceiver()注册),它将被导出。

  

如果Intend由BroadcastReceiver处理并且Intent未用于传递数据(例如,作为额外内容),是否还存在风险?

关闭袖带,使用隐式Intents有两个风险:

  1. 在发送方,任何人都可以回复您的广播。虽然您可能认为广播的存在不是隐私/安全漏洞 - 而且在您的具​​体情况下,它可能不是泄密 - 这并非普遍存在。

  2. 在接收方,如果您的组件已导出(默认情况下,如果它可以处理隐式Intent),其他方可能会向您发送虚假广播,可能会诱使您做一些不幸的事情。