【发布时间】:2013-12-14 16:41:40
【问题描述】:
我有一些 C# 代码。它有一些存储为自动属性或私有字段的配置设置。理论上,使用它的人可以通过反射修改私有变量。
有办法拒绝吗?我可以使用只读静态字段,然后它们不能被修改。但是对该类本身的引用仍然可以替换为具有恶意设置的另一个。
我想到了闭包中的匿名方法和变量。但在这种情况下,仍然可以替换该委托的链接。
我还尝试为我的字段指定 SecurityCriticalAttribute,因为调用者可能没有 FullTrust 访问权限,但似乎它没有验证字段的访问权限。仅用于方法\类本身
更新
我是这样修的:
- 通过构造函数初始化所有变量
- 所有变量都有只读定义
-
我在构造函数中添加了 CAS 属性,所以没有 FullTrust 的人不能修改它
[PermissionSetAttribute(SecurityAction.Demand, Unrestricted = true)]
所以要更新变量,用户需要创建该类的新实例。然后 CAS 验证将验证调用者。
我不太喜欢这种方法,如果您有更好的方法,我将不胜感激
【问题讨论】:
-
是的,同意。但我的调用者将使用沙盒 appdomain。并且该 appdomain 将只有反射权限。似乎构造函数上的 [PermissionSet] 现在对我来说很好。可能是的,没有受限的 AppDomain,我不能否认。
标签: c# .net closures code-access-security