Udostępnij za pośrednictwem


CA2126: Typ LinkDemand wymagają dziedziczenie zapotrzebowania

TypeName

TypeLinkDemandsRequireInheritanceDemands

CheckId

CA2126

Kategoria

Microsoft.Security

Zmiana kluczowa

Kluczowa

Przyczyna

Niezamknięty publiczny typ jest chroniony poprzez żądanie łącza i ma zastępowalną metodę, a żadne z nich nie jest chronione wymaganiem dziedziczenia.

Opis reguły

Żądanie łącza dla metody lub jej typ deklarujący wymaga od bezpośredniego wywołującego metodę określonych uprawnień.Żądanie dziedziczenia na metodzie wymaga, aby metoda przesłaniania miała określone uprawnienia.Żądanie dziedziczenia dla typu wymaga od klasy pochodnej określonych uprawnień.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, należy zabezpieczyć typ lub metodę żądaniem dziedziczenia dla tego samego uprawnienia co żądanie łącza.

Kiedy pomijać ostrzeżenia

Nie należy pomijać ostrzeżenia dotyczącego tej reguły.

Przykład

Poniższy przykład pokazuje typ, który narusza regułę.

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

Powiązane reguły

CA2108: Zabezpieczenia deklaracyjne Przegląd w przypadku typów wartości

CA2112: Zabezpieczonych typów nie powinny wystawiać pól

CA2122: Nie ujawniać pośrednio metod żądających łącza

CA2123: Ustawienie atrybutu LinkDemand powinny być identyczne base

Zobacz też

Koncepcje

Dziedziczenie zapotrzebowania

LinkDemand

Zapotrzebowanie

Inne zasoby

Secure, wytyczne dotyczące programowania