CA2141: Transparente Methoden dürfen keine LinkDemands erfüllen
TypeName |
TransparentMethodsMustNotSatisfyLinkDemands |
CheckId |
CA2141 |
Kategorie |
Microsoft.Security |
Unterbrechende Änderung |
Breaking |
Ursache
Eine sicherheitstransparente Methode ruft eine Methode in einer Assembly auf, die nicht mit dem AllowPartiallyTrustedCallersAttribute (APTCA)-Attribut markiert ist, oder eine sicherheitstransparente Methode stellt ein SecurityAction().LinkDemand-Element für einen Typ oder eine Methode bereit.
Regelbeschreibung
Das Bedienen eines LinkDemand-Objektelements ist eine sicherheitsrelevante Operation, die die unbeabsichtigte Ausweitung von Berechtigungen verursachen kann. Sicherheitstransparenter Code darf LinkDemands nicht bedienen, da er nicht denselben Sicherheitsprüfungsanforderungen unterliegt wie sicherheitskritischer Code. Transparente Methoden in Assemblys des Sicherheitsregelsatzes der Ebene 1 sorgen dafür, dass alle LinkDemands, denen sie entsprechen, zur Laufzeit in vollständige Anforderungen konvertiert werden, wodurch Leistungsprobleme entstehen können. In Assemblys mit Sicherheitsregel auf Ebene 2 werden transparente Methoden nicht im Just-In-Time (JIT)-Compiler kompiliert, wenn sie versuchen, einen LinkDemand zu bedienen.
In Assemblys mit Ebene-2-Sicherheit, löst der Versuch, durch eine sicherheitstransparente Methode einen LinkDemand zu bedienen oder eine Methode in einer nicht-APTCA-Assembly aufzurufen, eine MethodAccessException aus. In Assemblys der Ebene 1 wird LinkDemand zu einer vollständigen Anforderung.
Behandeln von Verstößen
Um eine Verletzung dieser Regel zu korrigieren, markieren Sie die Zugriffsmethode mit dem SecurityCriticalAttribute-Attribut oder dem SecuritySafeCriticalAttribute-Attribut, oder entfernen Sie die LinkDemand aus der Methode, auf die zugegriffen wurde.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung dieser Regel.
Beispiel
In diesem Beispiel versucht eine transparente Methode, eine Methode aufzurufen, die über einen LinkDemand verfügt. Diese Regel wird für diesen Code ausgelöst.
using System;
using System.Security.Permissions;
namespace TransparencyWarningsDemo
{
public class TransparentMethodSatisfiesLinkDemandsClass
{
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
public void LinkDemandMethod() { }
public void TransparentMethod()
{
// CA2141 violation - transparent method calling a method protected with a link demand. Any of the
// following fixes will work here:
// 1. Make TransparentMethod critical
// 2. Make TransparentMethod safe critical
// 3. Remove the LinkDemand from LinkDemandMethod (In this case, that would be recommended anyway
// since it's level 2 -- however you could imagine it in a level 1 assembly)
LinkDemandMethod();
}
}
}