createPendingResult(int, android.content.Intent, int) 创建的 PendingIntents 是否安全?
Are PendingIntents created by createPendingResult(int, android.content.Intent, int) secure?
createPendingResult(int, android.content.Intent, int) 创建的 PendingIntents 是否可以抵御 Intent 欺骗攻击?
查看 Activity class 的源代码,我发现有一个 getPackage()。但是,我不清楚生成的 PendingIntent 是否仅限于创建它的上下文的应用程序。
不安全
首先,检查这个问题以获取有关 PendingIntent 的更多详细信息,以及它不安全的原因:What is an Android PendingIntent?
其次,一个非常重要的事情,上面问题的所有答案都没有提到,就是在创建PendingIntent之后,PendingIntent里面的intent是可以改变的!这意味着,当您将 PendingIntent 提供给另一个应用程序时,其行为可能会发生变化。 这是由 flags
参数控制的。查看 createPendingResult (int requestCode, Intent data, int flags) and Intent.fillIn (Intent other, int flags) 了解更多详情。
而CVE-2014-8609就是一个很好的例子,google它。
最后,从Activity class and the PendingIntentclass的源码中可以看到实现
createPendingResult
和 PendingIntent.getActivity
非常相似,意味着返回的 PendingIntent 具有相同的风险。
createPendingResult(int, android.content.Intent, int) 创建的 PendingIntents 是否可以抵御 Intent 欺骗攻击?
查看 Activity class 的源代码,我发现有一个 getPackage()。但是,我不清楚生成的 PendingIntent 是否仅限于创建它的上下文的应用程序。
不安全
首先,检查这个问题以获取有关 PendingIntent 的更多详细信息,以及它不安全的原因:What is an Android PendingIntent?
其次,一个非常重要的事情,上面问题的所有答案都没有提到,就是在创建PendingIntent之后,PendingIntent里面的intent是可以改变的!这意味着,当您将 PendingIntent 提供给另一个应用程序时,其行为可能会发生变化。 这是由 flags
参数控制的。查看 createPendingResult (int requestCode, Intent data, int flags) and Intent.fillIn (Intent other, int flags) 了解更多详情。
而CVE-2014-8609就是一个很好的例子,google它。
最后,从Activity class and the PendingIntentclass的源码中可以看到实现
createPendingResult
和 PendingIntent.getActivity
非常相似,意味着返回的 PendingIntent 具有相同的风险。