我在类Bar上有一个属性Foo:
public int Foo
{
get
{
return GetFoo();
}
set
{
SetFoo(value);
}
}
GetFoo
和SetFoo
都装饰着:
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
结果,FxCop正确地抱怨Foo属性(或者它的隐式getter和setter方法)没有相同的LinkDemand:
CA2122:Microsoft.Security: 'Bar.Foo.get()'调用 'Bar.GetFoo()'有一个LinkDemand。 通过这个调用,'Bar.GetFoo()'是 间接暴露给用户代码。 查看以下调用堆栈 可能会揭露一种规避方式 安全保护:
但是,当我尝试将相同的SecurityPermission
属性应用于该属性以修复此警告时,结果发现属性不是此属性的有效目标。
如何正确修复此FxCop警告?
<小时/> 编辑:回应Eric Lippert的评论“为什么在地球上的LinkDemand”?
在阅读了你的反应之后,我很快就猜到了Fanning的建议并不适用于我的情况。我现在看一下Demand vs. LinkDemand文章,并尝试使用Demand。
答案 0 :(得分:6)
您应该能够直接将属性应用于getter和setter,即:
public int Foo
{
[SecurityPermission(...)]
get
{
return GetFoo();
}
[SecurityPermission(...)]
set
{
SetFoo(value);
}
}
答案 1 :(得分:0)
仅供参考,您可以使用
进行装饰[PermissionSetAttribute(SecurityAction.LinkDemand,Name =“FullTrust”)]
参见页面: what does this security warning mean (.Net Process class)?