您的应用是否提供了这样的 Service,当触发某些操作时,作为回调它会启动另一个应用的 Activity?
比如,一个 Intent 接受了另一个 Intent 作为它的 Extra 参数,并将其作为参数通过 startActivity() 进行调用。
您是否知道,这种做法会让您的应用变得容易被攻击?
接下来,我将会解释使用这种方法带来的问题,并提供一个解决方案来让您的应用在更安全的前提下实现相同功能。
问题
我们期望这种类型的交互流程如下图所示:
流程图展示了一个启动回调 activity 的 Intent 如何作为一个扩展数据添加到一个启动 Service 的 Intent 中,然后使用此 Intent 启动回调 Activity
如上图所示,Client 应用为 ClientCallbackActivity 创建了一个 Intent 并将其作为 extra 添加到启动 Provider 应用的 ApiService 组件的 Intent 中。处理完启动 ApiService 的请求之后,Provider 应用使用 Client 应用创建的 Intent 去启动 ClientCallbackActivity。
❗️这里需要注意的是 Provider 应用正在使用它自己的应用 Context 去调用 startActivity() 方法。这样的调用方式会产生两个不良的后果:
由于 ClientCallbackActivity 是被 Provider 应用从外部启动的,在清单文件中必须将其标识为 exported,这样不仅 Provider 应用可以启动 ClientCallbackActivity,设备上任何其他的应用也都可以启动。