我正在查看PendingIntent.getBroadcast(Context, int, Intent, int)
的{{3}},它提到了......
出于安全原因,您在此处提供的Intent几乎总是一个明确的意图,即指定通过Intent.setClass传递给它的显式组件
安全原因究竟是什么?如果其他应用程序仍然可以仅使用您的包名称和组件名称创建一个,那么是什么使显式Intent
更安全?
我在NIST.gov上看到有关基于PendingIntent
的{{3}}的报告影响了所有的Android 4.x,其中恶意应用可以发送Intents作为SYSTEM用户。但是,我不确定相同的问题是否适用于我的应用。
如果Intent
处理BroadcastReceiver
并且Intent
未用于传递数据(例如,作为额外内容),是否还存在风险?
答案 0 :(得分:3)
我猜他们的真正含义是:
出于安全原因,您在此处提供的Intent几乎总是明确
Intent
指向未导出的组件,即指定要通过Intent传递的显式组件.setClass
您对“其他应用程序仍可以仅使用您的软件包名称和组件名称创建一个”的关注仅在导出组件时有效。对于BroadcastReceiver
,默认情况下,只有<intent-filter>
(或IntentFilter
,如果通过registerReceiver()
注册),它将被导出。
如果Intend由BroadcastReceiver处理并且Intent未用于传递数据(例如,作为额外内容),是否还存在风险?
关闭袖带,使用隐式Intents
有两个风险:
在发送方,任何人都可以回复您的广播。虽然您可能认为广播的存在不是隐私/安全漏洞 - 而且在您的具体情况下,它可能不是泄密 - 这并非普遍存在。
在接收方,如果您的组件已导出(默认情况下,如果它可以处理隐式Intent
),其他方可能会向您发送虚假广播,可能会诱使您做一些不幸的事情。