Typverknüpfungsaufrufe erfordern Vererbungsanforderungen
Aktualisiert: November 2007
TypeName |
TypeLinkDemandsRequireInheritanceDemands |
CheckId |
CA2126 |
Kategorie |
Microsoft.Security |
Unterbrechende Änderung |
Breaking |
Ursache
Ein öffentlicher unversiegelter Typ wird mittels eines Verknüpfungsaufrufs geschützt und weist eine überschreibbare Methode auf, aber weder der Typ noch die Methode werden durch eine Vererbungsanforderung geschützt.
Regelbeschreibung
Für einen Verknüpfungsaufruf, der für eine Methode oder den zugehörigen deklarierenden Typ durchgeführt wird, muss der unmittelbare Aufrufer der Methode über die angegebene Berechtigung verfügen. Für eine Vererbungsanforderung, die für eine Methode durchgeführt wird, muss eine überschreibende Methode die angegebene Berechtigung aufweisen. Für eine Vererbungsanforderung, die für einen Typ durchgeführt wird, muss eine Ableitungsklasse die angegebene Berechtigung aufweisen.
Behandlung von Verstößen
Um einen Verstoß gegen diese Regel zu beheben, schützen Sie den Typ oder die Methode mit einer Vererbungsanforderung, für die dieselbe Berechtigung erforderlich ist wie für den Verknüpfungsaufruf.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung dieser Regel.
Beispiel
Im folgenden Beispiel wird ein Typ veranschaulicht, der gegen die Regel verstößt.
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() {}
};
}
Verwandte Regeln
Deklarative Sicherheit bei Werttypen überprüfen
Gesicherte Typen sollten keine Felder verfügbar machen
Methoden mit Verknüpfungsaufruf nicht indirekt verfügbar machen
Überschreibungsverknüpfungsaufrufe sollten mit der Basis identisch sein