CA2126: 型のリンク要求には継承要求が必要です

TypeName

TypeLinkDemandsRequireInheritanceDemands

CheckId

CA2126

分類

Microsoft.Security

互換性に影響する変更点

あり

原因

シールされていないパブリックな型がリンク要求によって保護され、オーバーライド可能なメソッドを持っていますが、その型またはメソッドが継承確認要求によって保護されていません。

規則の説明

メソッドまたはメソッドの宣言型のリンク要求は、指定のアクセス許可を得るためにメソッドの直前の呼び出し元を必要とします。メソッドの継承確認要求は、指定のアクセス許可を得るためにオーバーライドするメソッドを必要とします。型の継承確認要求は、指定のアクセス許可を得るために派生クラスを必要とします。

違反の修正方法

この規則の違反を修正するには、リンク要求と同じアクセス許可の継承確認要求によって型またはメソッドの安全を確保します。

警告を抑制する状況

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

使用例

この規則に違反する型を次の例に示します。

Imports System
Imports System.Security.Permissions

Namespace SecurityLibrary

    <EnvironmentPermission(SecurityAction.LinkDemand, Read:="PATH")> _
    Public Class TypesWithLinkDemands

        Protected Overridable Sub UnsecuredMethod()
        End Sub

        <EnvironmentPermission(SecurityAction.InheritanceDemand, Read:="PATH")> _
        Protected Overridable Sub SecuredMethod()
        End Sub 

    End Class 

End Namespace
using System;
using System.Security.Permissions;

namespace SecurityLibrary
{
   [EnvironmentPermission(SecurityAction.LinkDemand, Read = "PATH")]
   public class TypesWithLinkDemands
   {
      public virtual void UnsecuredMethod() {}

      [EnvironmentPermission(SecurityAction.InheritanceDemand, Read = "PATH")]
      public virtual void SecuredMethod() { }
   }
}
using namespace System;
using namespace System::Security::Permissions;

namespace SecurityLibrary
{
    [EnvironmentPermission(SecurityAction::LinkDemand, Read = "PATH")]
    public ref class TypesWithLinkDemands
    {
    protected:
        virtual void UnsecuredMethod() {}

        [EnvironmentPermission(SecurityAction::InheritanceDemand, 
           Read = "PATH")]
        virtual void SecuredMethod() {}
    };
}

関連規則

CA2108: 値型での宣言セキュリティを確認します

CA2112: セキュリティで保護された型はフィールドを公開してはなりません

CA2122: リンク確認要求で間接的にメソッドを公開しないでください

CA2123: オーバーライドのリンク確認要求は基本と同様にします

参照

概念

継承確認要求

リンク確認要求

確認要求

その他の技術情報

安全なコーディングのガイドライン