为什么片段类可能无效?

Ofe*_*Ron 8 android android-fragments

我刚刚使用AndroidStudio向导创建了一个PreferenceActivity,运行它时抛出了一个奇怪的异常:

java.lang.RuntimeException: Subclasses of PreferenceActivity must override isValidFragment(String) to verify that the Fragment class is valid!
Run Code Online (Sandbox Code Playgroud)

我在这里看到了建议的解决方案,但我想知道为什么我必须检查我的片段类是否有效,因为我甚至不完全理解"有效"的定义,所以我决定问社区:

一个PreferenceActivity有isValidFragment(String fragmentName)一些方法,由于某种原因必须覆盖,为什么?片段类怎么可能无效?这样的覆盖会出现什么问题:

    @Override
    protected boolean isValidFragment(String fragmentName)
    {
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

Gui*_*uiz 2

为什么?

PreferenceActivity 的安全性受到损害,并isValidFragment(String name)作为响应提供。

更具体地说,从漏洞披露来看:

任何实现和导出扩展 PreferenceActivity 类的活动的应用程序都可以通过利用动态片段加载过程来加载任意类。

安全问题意味着恶意应用程序可以实例化您的 PreferenceFragments,并且它们将从实际父级获取额外内容,从而泄露数据。

作为一个补丁,isValidFragment(String name)它的创建是为了让您被迫提供“安全”片段的白名单,或者如果您始终返回 true,则承认您的应用程序被破坏的风险。

仅在启动 KitKat 时才需要,因为补丁是在那时引入的。

片段类怎么会无效呢?

与您的应用程序有一个陌生的名称。

可能会出什么问题?

有人可能通过评论中 @Sree 链接的此 pdf中描述的方法攻击您的应用程序。