You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用因Intent Redirection漏洞反复被拒,寻求排查及解决方法

Intent Redirection漏洞排查及修复方案

一、先修复AndroidManifest.xml中的明显风险点

  • 补全所有缺失的android:exported属性:当前有3个Activity未显式声明该属性,分别是MoreServicesPage、LoginOTPVerificationPage、MainActivity,targetSdkVersion为30的场景下,未声明该属性且包含Intent Filter的组件默认对外暴露,若不需要外部访问直接设置android:exported="false",若确实需要对外访问则明确设为true后补充后续Intent校验逻辑。
  • 修复FCM服务配置:你注册了两个重复的Firebase消息接收服务,其中Myfirebaseinstanceidservice错误设置了android:exported="true",将该属性改为false,删除冗余的FCM服务声明,避免多余的外部Intent处理逻辑。

二、高风险代码位置排查

所有对外暴露的组件接收的Intent都需要做校验,重点检查以下位置:

  1. SplashScreenPage组件:该组件设置了android:exported="true",同时配置了DeepLink的VIEW意图过滤器,重点检查onCreate、onNewIntent中对getIntent()的处理逻辑,是否存在直接取出Intent携带的参数、嵌套Intent直接调用startActivity/startService/sendBroadcast的逻辑。
  2. Firebase消息接收服务:检查onMessageReceived方法,是否存在直接用推送携带的参数构造跳转Intent、启动组件的逻辑,禁止通过外部传入的参数直接指定跳转目标。
  3. 通用逻辑检查:全局搜索代码中是否存在Intent.parseUri、onActivityResult处理外部返回Intent、PendingIntent嵌套外部Intent的逻辑,这类场景是Intent重定向漏洞的高发区。

三、通用修复规则

  • 所有不需要外部访问的组件必须显式声明android:exported="false",禁止依赖系统默认值。
  • 所有外部传入的Intent(包括DeepLink、推送、其他应用传入的Intent)转发前必须做两层校验:
    • 校验目标组件的包名必须等于当前应用的包名getPackageName()
    • 校验目标组件的类名必须在预设的应用内白名单列表中,禁止跳转到未定义的组件
  • 若需要启动第三方应用,必须显式指定目标应用包名,禁止使用隐式Intent。
  • 禁止通过外部传入的参数直接指定跳转的目标组件类名、Action等信息。

内容的提问来源于stack exchange,提问作者Ajay Pradhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:27:01