次の方法で共有


CA2143: 透過的メソッドは、セキュリティ確認要求を使用してはならない

TypeName

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 を使用して保護されてはならない