CA2140: Transparenter Code darf nicht auf sicherheitskritische Elemente verweisen.
Element | Wert |
---|---|
RuleId | CA2140 |
Category | Microsoft.Security |
Unterbrechende Änderung | Breaking |
Ursache
Eine transparente Methode:
behandelt einen sicherheitskritischen Sicherheitsausnahmetyp.
verfügt über einen Parameter, der als sicherheitskritischer Typ gekennzeichnet ist.
verfügt über einen generischen Parameter mit sicherheitskritischen Einschränkungen.
verfügt über eine lokale Variable eines sicherheitskritischen Typs.
verweist auf einen Typ, der als sicherheitskritisch gekennzeichnet ist.
ruft eine Methode auf, die als sicherheitskritisch gekennzeichnet ist.
verweist auf ein Feld, das als sicherheitskritisch gekennzeichnet ist.
gibt einen Typ zurück, der als sicherheitskritisch gekennzeichnet ist.
Hinweis
Diese Regel wurde als veraltet markiert. Weitere Informationen finden Sie unter Veraltete Regeln.
Regelbeschreibung
Ein Codeelement, das mit dem SecurityCriticalAttribute-Attribut markiert ist, ist sicherheitskritisch. Eine transparente Methode kann kein sicherheitskritisches Element verwenden. Wenn ein transparenter Typ versucht, einen sicherheitskritischen Typ zu verwenden, wird eine TypeAccessException, MethodAccessException oder FieldAccessException ausgelöst.
Behandeln von Verstößen
Führen Sie einen der folgenden Schritte aus, um einen Verstoß gegen diese Regel zu beheben:
Markieren Sie das Codeelement, das den sicherheitskritischen Code verwendet, mit dem SecurityCriticalAttribute-Attribut.
- oder -
Entfernen Sie das SecurityCriticalAttribute-Attribut aus den Codeelementen, die als sicherheitskritisch gekennzeichnet sind, und markieren Sie sie stattdessen mit dem Attribut SecuritySafeCriticalAttribute oder SecurityTransparentAttribute.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung dieser Regel.
Beispiel
In den folgenden Beispielen versucht eine transparente Methode, auf eine sicherheitskritische generische Auflistung, ein sicherheitskritisches Feld und eine sicherheitskritische Methode zu verweisen.
using System;
using System.Security;
using System.Collections.Generic;
namespace TransparencyWarningsDemo
{
[SecurityCritical]
public class SecurityCriticalClass { }
public class TransparentMethodsReferenceCriticalCodeClass
{
[SecurityCritical]
private object m_criticalField;
[SecurityCritical]
private void CriticalMethod() { }
public void TransparentMethod()
{
// CA2140 violation - transparent method accessing a critical type. This can be fixed by any of:
// 1. Make TransparentMethod critical
// 2. Make TransparentMethod safe critical
// 3. Make CriticalClass safe critical
// 4. Make CriticalClass transparent
List<SecurityCriticalClass> l = new List<SecurityCriticalClass>();
// CA2140 violation - transparent method accessing a critical field. This can be fixed by any of:
// 1. Make TransparentMethod critical
// 2. Make TransparentMethod safe critical
// 3. Make m_criticalField safe critical
// 4. Make m_criticalField transparent
m_criticalField = l;
// CA2140 violation - transparent method accessing a critical method. This can be fixed by any of:
// 1. Make TransparentMethod critical
// 2. Make TransparentMethod safe critical
// 3. Make CriticalMethod safe critical
// 4. Make CriticalMethod transparent
CriticalMethod();
}
}
}
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für