繁体   English   中英

.Net中的隐藏变量

[英]Hidden variable in closure in .Net

我有一些C#代码。 它有一些存储为auto属性或私有字段的配置设置。 从理论上讲,使用它的人可以通过Reflection修改私有变量。

有没有办法否认它? 我可以使用只读静态字段,然后无法修改它们。 但是对该类本身的引用仍然可以被替换为具有恶意设置的另一个类。

我想到了闭包中的匿名方法和变量。 但在这种情况下,仍然可以替换该代表的链接。

此外,我已经尝试为我的字段指定SecurityCriticalAttribute,因为调用者可能没有FullTrust访问权限,但似乎它不验证字段的访问权限。 仅适用于方法\\类本身

UPDATE

我用这样的方式修复它:

  • 通过构造函数初始化所有变量
  • 所有变量都具有只读定义
  • 我已经将CAS属性添加到构造函数中,因此没有没有FullTrust的人无法修改它

     [PermissionSetAttribute(SecurityAction.Demand, Unrestricted = true)] 

因此,要更新变量,用户需要创建该类的新实例。 然后CAS验证将验证呼叫者。

我不太喜欢这种方法,如果你有更好的方法,我会很感激

不幸的是,字段上的readonly修饰符不会阻止通过反射进行构造后修改。 没有办法阻止具有私有反射权限的代码修改内存中的应用程序状态。 实际上, ReflectionPermission被认为是“危险”权限之一,其授权基本上类似于完全信任授权( http://msdn.microsoft.com/en-us/library/wybyf7a0.aspx )。

换句话说,如果您要在沙箱中授予私有反射权限,您可能根本不打扰沙盒...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM