CA2143:透明方法不应使用安全要求

类型名

TransparentMethodsShouldNotDemand

CheckId

CA2143

类别

Microsoft.Security

是否重大更改

原因

透明类型或方法以声明方式按需用 System.Security.Permissions.SecurityAction.Demand 标记,或者该方法调用 CodeAccessPermission.Demand 方法。

规则说明

安全透明代码不应负责验证某个操作的安全,因此不应要求权限。 安全透明代码应使用完整的需求来作出安全决策并且安全关键代码不应依赖透明代码以进行完全的请求。 执行安全检查的任何代码(如安全要求)应改为安全关键。

如何解决冲突

要修复该规则的冲突,用 SecuritySafeCriticalAttribute 特性标记该方法。 也可以移除请求。

何时禁止显示警告

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

示例

该规则使用下面的代码,因为透明的方法发出声明安全请求。

using System;
using System.Security;
using System.Security.Permissions;

namespace TransparencyWarningsDemo
{

    public class TransparentMethodDemandClass
    {
        // CA2142 violation - transparent code using a Demand.  This can be fixed by making the method safe critical.
        [PermissionSet(SecurityAction.Demand, Unrestricted = true)]
        public void TransparentMethod()
        {
        }
    }
}

请参见

参考

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