当前位置: 首页 > 面试题库 >

反射是否会破坏私有方法的概念,因为私有方法可以在类外部进行访问?

崔涵亮
2023-03-14
问题内容

反思会打破私有方法的想法吗?因为可以从类外部访问私有方法?(也许我不明白反射的含义或错过了其他事情,请告诉我)
http://en.wikipedia.org/wiki/Reflection_%28computer_science%29

编辑: 如果重新分配违反了私有方法的想法-我们是否仅将私有方法用于程序逻辑而不是程序安全?

谢谢


问题答案:

我们是否仅将私有方法用于程序逻辑而不用于程序安全?

您不清楚“程序安全性”是什么意思。安全性不能一成不变地讨论;您正在考虑使用哪些资源来防御哪些威胁?

CLR代码访问安全系统旨在保护 用户数据的 资源免受 在用户计算机上运行敌对的部分受信任代码 的威胁。

因此,CLR中反射,访问控制和安全性之间的关系很复杂。简要且并非完全准确,规则如下:

  • 完全信任意味着完全信任。 完全受信任的代码可以访问进程中的每一位内存。 其中包括私有字段。

  • 在部分信任中反映私人的能力由权限控制;如果未授予它,则部分信任代码可能不会对私有对象进行反映。

有关详细信息,请参见http://blogs.msdn.com/b/shawnfa/archive/2006/09/29/777047.aspx。

  • 桌面CLR支持一种称为“受限跳过可见性”的模式,其中反射和安全系统如何交互的规则略有不同。基本上,如果部分受信任的代码正在访问来自具有 相等更少 信任的程序集的类型的私有字段,则有权使用私有反射的部分受信任的代码可以通过反射来访问私有字段。

看到

http://blogs.msdn.com/b/shawnfa/archive/2006/10/05/using-lightweight-codegen-
from-partial-
trust.aspx

详情

执行摘要是:您 可以 充分锁定部分受信任的代码,以使其无法使用反射来查看私有内容。您 不能
锁定完整的信任代码。这就是为什么它被称为“完全信任”。如果您想限制它,那就 不要信任它

那么:将字段设为私有是否可以保护它免受试图读取它的低信任度代码的威胁,从而窃取用户数据? 是的 。它可以保护它免受 高信任度 代码读取它的威胁吗?
没有 。如果代码既受用户信任又对用户不利,那么用户 就会遇到很大的问题 。他们不应该信任该代码。

请注意,例如,将字段设置为私有并不能保护 您的代码中的秘密 免受 拥有您的代码并且对您不利的用户的注意 。该安全系统可保护 良好用户 免受
恶意代码的侵害 。它不能保护 好的代码 免受 恶意用户的 攻击。如果您想使某些东西不公开,以免被 用户使用,
那么您就大错特错了。如果您想保密,以防止 那些诱使用户运行敌对的低信任度代码的邪恶黑客 的机密,那么这是个好方法。



 类似资料:
  • 我在使用reflections api的公共类中的私有类中使用私有方法时遇到问题。下面是一个简化的代码示例: 同样,我希望能够实例化一个类对象,然后从私有类调用。我一直试图通过反射来做到这一点,但我似乎无法超过1级。此外,内部类可能有也可能没有大多数代码似乎使用的构造函数。上面的代码只是框架。 我当前的代码: 我查找了各种方法来获取内部类或私有方法,但找不到在不使用构造函数的情况下将外部对象获取到

  • 这将打印a.a=50 但是,如果我将更改为,那么我可以如何访问该变量呢?

  • 问题内容: 我试图通过反射获取静态私有属性的值,但失败并显示错误。 我得到的异常是: 而且,我需要使用以下代码来调用一个私有的。 但是问题是Student类是单例类,并且构造函数是私有的,并且无法访问。 问题答案: 您可以将字段设置为可访问:

  • 问题内容: 如果我有一个包私有的Java类(用“ class”声明,而不是“ public class”),那么将内部方法声明为public或protected或package- private确实没有区别,对吗?那么我应该使用哪个,或者什么时候该使用呢?我有点困惑。 问题答案: 如果我有一个包私有的Java类(用“ class”声明,而不是“ public class”),那么将内部方法声明为p

  • 我知道我们可以通过反射访问私有构造函数,就像@Sanjay T.Sharma在回答我的问题时提到的:“instanceof void”总是返回false吗? 不过,@Duffymo表示: 您可以使用反射访问私有的所有东西--方法、构造函数、数据成员、所有东西。 如何访问私有方法和私有数据成员? 是否可以通过反射访问局部变量? 是否有方法防止任何人访问私有构造函数、方法和数据成员?

  • 问题内容: Java中是否可以通过反射访问私有字段str?例如获取该字段的值。 问题答案: 是。 然后,使用字段对象获取类实例上的值。 请注意,方法通常会使人们感到困惑。你有该字段,但没有该对象的实例。你必须将其传递给方法