我有一些C#代码。它有一些配置设置存储为自动属性或专用字段。理论上,使用它的人可以通过Reflection来修改私有变量。隐藏在.Net中的闭包变量
有没有办法否定它?我可以使用只读静态字段,然后它们不能被修改。但是对这个类本身的引用仍然可以用另一个恶意设置替换。
我想过关闭匿名方法和变量。但在这种情况下,该代表的链接仍可以替换。
另外我试过为我的字段指定SecurityCriticalAttribute,因为调用者可能没有FullTrust访问权限,但似乎没有验证字段的访问权限。只是方法\类itselfs
UPDATE
我固定它以这样的方式:
- 初始化所有通过构造变量
- 所有变量具有只读的定义
我已经将CAS属性添加到构造函数中,所以没有FullTrust的人不能修改它
[PermissionSetAttribute(SecurityAction.Demand, Unrestricted = true)]
所以要更新变量,用户需要创建该类的新实例。然后CAS验证将验证呼叫者。
我不喜欢这种方法太多了,如果你有更好的办法,我会很感激
您不能:http://stackoverflow.com/a/8357546/857807 – dcastro
是的,同意。但我的调用者将使用沙箱appdomain。而该appdomain只会拥有反射权限。似乎构造函数的[PermissionSet]现在对我来说工作正常。也许是的,没有限制的AppDomain,我不能否认它。 –