[英]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.