Sdílet prostřednictvím


CA2126: Požadavky propojení typů vyžadují dědičnost požadavků

TypeName

TypeLinkDemandsRequireInheritanceDemands

CheckId

CA2126

Kategorie

Microsoft.Security

Narušující změna

Narušující

Příčina

Veřejný neuzavřený typ, který je chráněn požadavkem na odkaz obsahuje přepisovatelnou metodu a ani typ, ani metoda nejsou chráněny požadavkem volání dědičnosti.

Popis pravidla

Požadavek na odkaz na metodu nebo její deklarující typ vyžaduje, aby měl nejbližší volající metody zadané oprávnění.Poptávka na volání dědičnosti na metodu vyžaduje, aby přepisující metoda měla zadané oprávnění.Poptávka na volání dědičnosti na typ vyžaduje, aby měla odvozená třída zadané oprávnění.

Jak vyřešit porušení

Chcete-li napravit porušení tohoto pravidla, zabezpečte typ nebo metodu pomocí požadavku na volání dědičnosti stejným oprávněním, jako u požadavku na odkaz.

Kdy potlačit upozornění

Nepotlačujte upozornění na toto pravidlo.

Příklad

Následující příklad ukazuje typ, který toto pravidlo porušuje.

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() {}
    };
}

Související pravidla

CA2108: Zkontrolujte deklarativní zabezpečení na hodnotách

CA2112: Zabezpečené typy by neměly vystavovat pole

CA2122: Nezveřejňujte nepřímo metody s požadavky propojení

CA2123: Požadavky na přepsání odkazu musejí být identické s bází

Viz také

Koncepty

Požadavky na dědičnost

Požadavky na odkaz

Požadavky

Další zdroje

Pokyny pro zabezpečené kódování