CA2142:不应使用 LinkDemand 保护透明代码

类型名

TransparentMethodsShouldNotBeProtectedWithLinkDemands

CheckId

CA2142

类别

Microsoft.Security

是否重大更改

原因

透明方法需要 LinkDemand 或其他安全要求。

规则说明

对于需要 LinkDemand 来访问它们的透明方法,将会引发此规则。 安全透明代码不应负责验证某个操作的安全,因此不应要求权限。 因为透明方法不会受安全性影响,所以它们不应作出任何安全决策。 此外,确实会作出安全决策的安全关键代码不应依赖透明代码实现作出这种决策。

如何解决冲突

修复与该规则的冲突,删除透明的方法上的链接要求或用 SecuritySafeCriticalAttribute 标记方法,前提是它执行安全检查,如安全要求。

何时禁止显示警告

不要禁止显示此规则发出的警告。

示例

在下面的示例中,规则在方法上激发,因为该方法是透明的并且标记为包含LinkDemand的LinkDemand PermissionSet

using System;
using System.Security.Permissions;

namespace TransparencyWarningsDemo
{

    public class TransparentMethodsProtectedWithLinkDemandsClass
    {
        // CA2142 violation - transparent code using a LinkDemand.  This can be fixed by removing the LinkDemand
        // from the method.
        [PermissionSet(SecurityAction.LinkDemand, Unrestricted = true)]
        public void TransparentMethod()
        {
        }
    }
}

不要禁止显示此规则发出的警告。