gpt4 book ai didi

android - 防止反射 - android

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:31:04 25 4
gpt4 key购买 nike

即使是我的类的私有(private)成员/函数也可以使用 setAccessible(true) 通过反射访问。有没有办法阻止这种来自外部代码的访问?

我在 stack-overflow 上读到一些东西,我可以使用 SecurityManager 来防止小程序中的反射(虽然不确定它是如何工作的),但是 Android 是否有类似的机制出色地?也许是注释或巧妙的编程?

最佳答案

退后一步,您观察到的是 Sun 最初体现在 JVM 中的 Java 执行模型与 Android 的执行模型在安全理念上的差异。

最初的 Java VM 设计旨在用于一个系统,其中多个相互可疑的应用程序(或 Java 术语中的“小程序”)将同时驻留在单个地址空间中,在单个 VM 中运行。因为设计者不希望一个应用程序能够干扰另一个应用程序,所以他们煞费苦心地定义了一个 VM 内部安全模型,该模型将不允许诸如一个对象接触不同类的另一个对象的私有(private)字段之类的事情。

也就是说,Java 库最终在安全模型之外有各种“逃生 channel ”。正如您所注意到的,其中之一是反射对象上的 setAccessible()

Android 的模型不同:Android 使用进程作为安全边界和应用程序隔离单元,而不是像传统 JVM 那样试图将其融入进程。这使整个 Java 安全模型变得毫无意义,除了因为它帮助应用程序“将其从自身中拯救出来”。也就是说,不让一个对象侵入另一个对象的私有(private)部分是一个很好的设计,而默认的 Java 安全模型恰恰提供了这一点。

撇开人们修改您的代码的问题不谈,对于 Android,作为应用程序的作者,您可以控制最终在您的应用程序进程中运行的所有代码。如果您选择包含调用 setAccessible() 的代码,那是您的事。您可能会搬起石头砸自己的脚,但您肯定不会搬起石头砸自己的脚,因为 Android 安全模型在进程层运行,本质上不会让这种情况发生。同样,使用 native 代码将使您完全脱离 Java 对象模型,这允许事情在过程中变得完全杂乱无章,但也允许您以比在 Java 中更有效的方式表达一些事情。这是一种权衡,但这是针对每个应用程序开发人员的权衡,不会特别影响您手机/设备上发生的任何其他事情。

我知道这并不能直接回答您的问题,但我希望它提供了一些有用的背景信息。

关于android - 防止反射 - android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13211369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com