我最近才发现 here由于反射,可以(至少在 c# 中)查找私有(private)字段和属性。
我很惊讶,尽管我知道像 DataContractSerializer 类这样的构造需要以某种方式访问它们。
现在的问题是,如果任何人都可以访问我类(class)中的每个字段,这有点不安全,不是吗?我的意思是如果有人有一个 private bool _isLicensed
字段怎么办。它可以很容易地改变!
后来才知道here 字段访问器并不是一种安全机制。
那么我如何确保我的应用程序安全,这意味着我如何防止除我以外的任何人更改我的类中的基本状态值?
最佳答案
The question now is, if anyone can access every field in my classes, this is kind of insecure, isn't it?
不是每个人都可以。只有具有足够权限的代码——可信代码。不受信任的代码受到相当多的限制。另一方面,如果想要使用反射的人拥有您的程序集,他们可以在自己的机器上运行受信任的代码。不过,这并不是新的攻击媒介,就好像他们已经获得了您的代码一样,他们也可以对其进行修改以首先公开该字段。
基本上,如果代码在他们的机器上运行,您应该期望他们能够用它做几乎任何事情。不要依赖访问修饰符来保密任何事情。
So how do I make my Application safe, meaning how do I prevent anyone other than me from changing essential status values inside my classes?
如果恶意用户自己运行您的代码,您几乎不能。你可以让他们更难,但那是一场没有乐趣的军备竞赛。
因此,在某些情况下,一种选择是不要让任何其他人运行您的代码 - 在您已锁定的环境中将其托管在 Web 上。当然,这并不适用于所有情况。
如果您必须让用户自己运行代码,您需要权衡他们篡改代码的缺点以及使篡改变得困难的成本。我们无法真正帮助您实现这种平衡 - 我们不知道您的申请是什么,也不知道涉及的成本是多少(声誉、财务等)。
关于c# - 由于反射访问私有(private)字段和属性不是安全问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30191282/