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

如何实现安全的系统BroadcastReceiver,修复动态注册的不安全漏洞

动态注册BroadcastReceiver接收系统广播的安全加固方案

系统广播是否自带权限校验?

并非所有系统广播都自带强制权限校验:

  • 绝大多数核心系统广播(如开机完成、网络状态变化、电量变化等)的发送方为系统进程,本身持有系统级专属权限,普通第三方应用无法申请到这类权限,无法模拟发送这类广播
  • 少数边缘系统广播无强制发送权限限制,同时如果你动态注册时未做任何接收限制,恶意应用可以构造相同Action的伪造广播触发你的接收器执行预期外的逻辑,这也是AppKnox报出漏洞的核心原因

安全加固操作方案

  • 注册时指定发送方权限
    调用带权限参数的registerReceiver()重载方法注册接收器,填入你接收的系统广播对应的官方要求发送方权限,只有持有该权限的发送方发出的广播才会被你的接收器接收,示例代码如下:

    // 以接收网络变化广播为例,对应的系统发送方权限为android.permission.CONNECTIVITY_INTERNAL
    registerReceiver(
        myBroadcastReceiver,
        intentFilter,
        "android.permission.CONNECTIVITY_INTERNAL",
        null
    )
    

    你可以查询Android官方开发者文档中对应系统广播的发送方权限要求,填入对应权限即可。

  • 收紧IntentFilter匹配规则
    仅在IntentFilter中添加你实际需要接收的系统广播Action,不要添加多余的匹配规则,避免接收器被非预期的广播触发。

  • 收到广播后做二次校验
    接收器内部执行逻辑前,先做多层校验:

    1. 校验广播的Action是否完全匹配你预期接收的系统广播Action
    2. 校验广播发送方的身份,可通过getCallingPackage()获取发送方包名,或校验发送方签名是否为系统签名
    3. 对Intent携带的所有额外数据做合法性校验,拒绝处理格式/内容不符合预期的数据
  • 及时注销接收器
    动态注册的BroadcastReceiver不需要使用时,立即调用unregisterReceiver()注销,减少接收器的暴露时长,降低被攻击的风险

完成以上配置后即可解决AppKnox报出的不安全漏洞问题。

内容的提问来源于stack exchange,提问作者David Rojas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:45:02