CA2142: 透過的コードは、LinkDemand を使用して保護されてはならない

TypeName

TransparentMethodsShouldNotBeProtectedWithLinkDemands

CheckId

CA2142

分類

Microsoft.Security

互換性に影響する変更点

あり

原因

透過的メソッドが、LinkDemand またはその他のセキュリティ確認要求を必要としています。

規則の説明

この規則は、アクセスするために LinkDemands を要求する透過的メソッドに対して適用されます。透過的セキュリティ コードでは、操作のセキュリティ検証を行うことができないため、アクセス許可を要求できません。透過的メソッドは、セキュリティに中立的であると見なされるため、セキュリティ上の決定を行うことができません。また、セキュリティ上の決定を行うセーフ クリティカルなコードでは、透過的なコードを使用して事前にそのような決定を行うことはできません。

違反の修正方法

この規則への違反を修正するには、透過的メソッドのリンク確認要求を削除するか、メソッドがセキュリティ確認要求などのセキュリティ チェックを実行する場合はメソッドに対して 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()
        {
        }
    }
}

この規則による警告は抑制しないでください。