一尘不染

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

php

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

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

谢谢


阅读 330

收藏
2020-05-29

共1个答案

一尘不染

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

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

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

详情

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

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

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

2020-05-29