Wenn eine einfache C#-Enumeration zu einem Sicherheitsrisiko wird
AC # Enum sieht oft harmlos aus, kann aber leicht zu Berechtigungslücken führen, wenn sich Werte überschneiden oder eine Validierung fehlt.
Viele Entwickler verwenden in C# Enums oder Flag-Enums zur Berechtigungssteuerung. Werden jedoch keine eindeutigen, validierten Werte erzwungen, führt dies unbemerkt zu Fehlern. Unsicheres Beispiel, nur zu Lehrzwecken.
⚠️Unsicheres Beispiel, nur für Bildungszwecke. Nicht in der Produktion verwenden.
public enum UserRole
{
None = 0,
User = 1,
Admin = 2,
SuperAdmin = 3 // ❌ Overlaps with Admin
}
Sichere Version:
public enum UserRole
{
None = 0,
User = 1,
Admin = 2,
SuperAdmin = 4
}
// # Educational note: Always assign unique power-of-two values for flag enums.
Pädagogischer Hinweis: Selbst ein einfaches C#-Enum wie dieses kann kritische Schwachstellen aufdecken, wenn ungeprüfte Werte die Validierungsschichten passieren.
Häufige Schwachstellen in Flag-Enumerationen und der C#-Enum-Logik
Die meisten Sicherheitsprobleme entstehen durch Flag-Enumerationen oder unsichere Typumwandlungen von C#-Enumerationsdaten.
Ungültige Typumwandlung
⚠️Unsicheres Beispiel, nur zu Bildungszwecken:
var role = (UserRole)Enum.Parse(typeof(UserRole), input);
Angreifer können undefinierte Ganzzahlen senden, um unerwartete Logikpfade auszulösen.
Sichere Version:
if (!Enum.TryParse(input, out UserRole role) || !Enum.IsDefined(typeof(UserRole), role))
throw new InvalidOperationException("Invalid role value");
Hinweis für Lehrende: Überprüfen Sie immer die geparsten Werte für C#-Enumerationen und Flag-Enumerationen.
Fehlerhafte Flag-C#-Enums.
⚠️Unsicheres Beispiel, nur zu Bildungszwecken:
[Flags]
public enum Permissions
{
None = 0,
Read = 1,
Write = 2,
Admin = 3 // ❌ Overlaps with Read + Write
}
Sichere Version:
[Flags]
public enum Permissions
{
None = 0,
Read = 1,
Write = 2,
Delete = 4,
Admin = 8
}
Pädagogischer Hinweis: Definieren Sie Flag-Enumerationen mithilfe von unterschiedlichen Zweierpotenzen.
Falsch definierte Flag-Enumerationen sind eine der einfachsten Möglichkeiten, eine Rechteausweitung in der C#-Enumerationslogik zu verursachen.
Serialisierungsfallen bei der C#-Enum-Verarbeitung
Eine ungenaue Serialisierung von C#-Enum-Werten kann Ihre Anwendung inkonsistenten Zuständen aussetzen oder Deserialisierungsangriffe.
⚠️Unsicheres Beispiel, nur zu Bildungszwecken:
var data = JsonSerializer.Deserialize<User>(payload);
If payload contains "Role": 99, it maps to an invalid c# enum enum value.
Sichere Version:
var opts = new JsonSerializerOptions
{
Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase, allowIntegerValues: false) }
};
var data = JsonSerializer.Deserialize<User>(payload, opts);
Pädagogischer Hinweis: Die Deserialisierung numerischer Aufzählungen aus nicht vertrauenswürdigen Eingaben darf niemals zugelassen werden.
Vermeidung von C#-Enum-Logikfehlern in DevSecOps Pipelines
DevSecOps-Teams sollten die Validierung automatisieren. für jede C # Enum, C sharp enum und flag enum Definition, um inkonsistente Zustände zu verhindern.
Beispiel: sicher pipeline Integration:
- name: Validate enum definitions
run: |
dotnet test --filter Category=EnumValidation
xygeni validate --rules enums
# Never expose real tokens or internal URLs in pipelines
Hinweis für Pädagogen: Durch statische Analyse lassen sich überlappende Flag-Enumerationen, unsichere Deserialisierung und fehlende Switch-Anweisungen erkennen – und das alles vor der Bereitstellung.
Erkennung von Enum- und Flag-Problemen mit Xygeni
Xygeni Code Security Erkennt automatisch überlappende oder inkonsistente Flag-Enum-Werte, unsicheres Enum-Parsing und fehlende Validierung in der C#-Autorisierungslogik.
- Überlappende oder nicht ausgerichtete Flag-Enum-Werte
- Unsichere Enum-Parsing-Logik in C#
- Deserialisierungsfehler bei der Verwendung von C#-Enums
- Fehlende Validierungs- oder Standardfälle in der Autorisierungslogik
Ejemplo:
xygeni scan --detect enums
Pädagogischer Hinweis: Verwenden Sie Xygeni, um die Integrität von Enumerationen zu erzwingen und Flag-Enumerationen zu sichern.
Xygeni validiert Enum-Definitionen, erkennt sich überschneidende oder inkonsistente Werte und wendet automatische Durchsetzung an. CI/CD pipelines durch:
xygeni validate --rules enums
Starke Logik erfordert starke Typisierung und Validierung.
Ob mit standard Bei C#-Enumerationen oder komplexen Flag-Enumerationen muss jeder Wert explizit angegeben, validiert und getestet werden. Ungeprüfte Ganzzahlen oder sich überschneidende Flags können zu Rechteausweitung, unsicheren Zustandsänderungen und logischen Inkonsistenzen führen. Mit Xygeni automatisieren Teams die Erkennung und Validierung von Enum-Definitionen und gewährleisten so eine starke Typisierung, vorhersehbare Logik und sicheres Verhalten von der Entwicklung bis zum Deployment.





