.Net中闭包中的隐藏变量

本文关键字:变量 隐藏 闭包 Net | 更新日期: 2024-09-23 17:48:21

我有一些C#代码。它具有一些存储为自动属性或专用字段的配置设置。理论上,使用它的人可以通过反射来修改私有变量。

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

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

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

更新

我用这样的方式修复了它:

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

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

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

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

.Net中闭包中的隐藏变量

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

换句话说,如果你要在沙箱中授予私有反射权限,你最好不要麻烦沙箱。。。