c# enum - c# enum enum - c sharp enum - wyliczenia flag

Nadużycia w wyliczeniach C#: jak proste flagi powodują poważne problemy z bezpieczeństwem

Kiedy proste wyliczenie w C# staje się zagrożeniem bezpieczeństwa

AC # Enum często wygląda niegroźnie, ale może łatwo doprowadzić do błędów uprawnień, jeśli wartości się nakładają lub brakuje walidacji.
Wielu programistów korzysta z wyliczeń C# Enum lub flag enum do kontroli uprawnień, ale jeśli nie wymusi się unikatowych, sprawdzonych wartości, logika ulega awarii. Niebezpieczny przykład, wyłącznie w celach edukacyjnych.

⚠️Niebezpieczny przykład, wyłącznie do celów edukacyjnych. Nie używać w środowisku produkcyjnym.

				
					public enum UserRole
{
    None = 0,
    User = 1,
    Admin = 2,
    SuperAdmin = 3 // ❌ Overlaps with Admin
}

				
			

Wersja bezpieczna:

				
					public enum UserRole
{
    None = 0,
    User = 1,
    Admin = 2,
    SuperAdmin = 4
}
// # Educational note: Always assign unique power-of-two values for flag enums.


				
			

Uwaga edukacyjna: Nawet proste wyliczenie C-dur może ujawnić krytyczne punkty końcowe, jeśli niesprawdzone wartości przejdą przez warstwy walidacji.

Typowe luki w zabezpieczeniach wyliczeń flag i logiki wyliczeń języka C#

Większość problemów z bezpieczeństwem wynika z flag typu enum lub niebezpiecznego rzutowania danych typu enum języka C#.

Nieprawidłowe rzutowanie

⚠️Niepewny przykład, wyłącznie w celach edukacyjnych:

				
					var role = (UserRole)Enum.Parse(typeof(UserRole), input);


				
			

Atakujący mogą wysyłać niezdefiniowane liczby całkowite w celu uruchomienia nieoczekiwanych ścieżek logicznych.

Wersja bezpieczna:

				
					if (!Enum.TryParse(input, out UserRole role) || !Enum.IsDefined(typeof(UserRole), role))
    throw new InvalidOperationException("Invalid role value");

				
			

Uwaga edukacyjna: Zawsze sprawdzaj wartości parsowane dla wyliczeń C# i wyliczeń flag.

Flaga C# Enums poszła nie tak

⚠️Niepewny przykład, wyłącznie w celach edukacyjnych:

				
					[Flags]
public enum Permissions
{
    None = 0,
    Read = 1,
    Write = 2,
    Admin = 3 // ❌ Overlaps with Read + Write
}


				
			

Wersja bezpieczna:

				
					[Flags]
public enum Permissions
{
    None = 0,
    Read = 1,
    Write = 2,
    Delete = 4,
    Admin = 8
}

				
			

Uwaga edukacyjna: Zdefiniuj wyliczenia flag, używając odrębnych potęg liczby dwa.

Nieprawidłowo zdefiniowane wyliczenia flag to jeden z najprostszych sposobów spowodowania eskalacji uprawnień w logice wyliczeniowej języka C#.

Pułapki serializacji w obsłudze wyliczeń w języku C Sharp

Luźna serializacja wartości wyliczeniowych języka C może narazić Twoją aplikację na niespójne stany lub ataki deserializacji.

⚠️Niepewny przykład, wyłącznie w celach edukacyjnych:

				
					var data = JsonSerializer.Deserialize<User>(payload);

If payload contains "Role": 99, it maps to an invalid c# enum enum value.

				
			

Wersja bezpieczna:

				
					var opts = new JsonSerializerOptions
{
    Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase, allowIntegerValues: false) }
};
var data = JsonSerializer.Deserialize<User>(payload, opts);



				
			

Uwaga edukacyjna: Nigdy nie zezwalaj na deserializację wyliczeń numerycznych z niezaufanych danych wejściowych.

Zapobieganie błędom logiki wyliczeń języka C# w DevSecOps Pipelines

Zespoły DevSecOps powinny zautomatyzować walidację dla każdej definicji C# Enum, C sharp enum i flag enum w celu zapobiegania niespójnym stanom.

Na przykład bezpieczny pipeline integracja:

				
					- name: Validate enum definitions
  run: |
    dotnet test --filter Category=EnumValidation
    xygeni validate --rules enums
# Never expose real tokens or internal URLs in pipelines

				
			

Uwaga edukacyjna: analiza statyczna umożliwia wykrycie nakładających się wyliczeń flag, niebezpiecznej deserializacji i brakujących przypadków przełączania, a wszystko to przed wdrożeniem.

Wykrywanie problemów z wyliczeniami i flagami za pomocą Xygeni

Xygeni Code Security automatycznie wykrywa nakładające się lub niespójne wartości wyliczeń flag, niebezpieczne przetwarzanie wyliczeń i brakujące walidacje w logice autoryzacji C#.

Xygeni wykrywa:

  • Nakładające się lub nieprawidłowo wyrównane wartości wyliczeń flag
  • Niebezpieczna logika analizy wyliczeń C#
  • Wady deserializacji w użyciu wyliczenia języka C#
  • Brakujące przypadki walidacji lub domyślne w logice autoryzacji

Przykład:

				
					xygeni scan --detect enums
				
			

Uwaga edukacyjna: Użyj Xygeni do wymuszenia integralności wyliczeń i zabezpieczenia wyliczeń flag.

Xygeni weryfikuje definicje wyliczeń, wykrywa nakładające się lub niespójne wartości i stosuje automatyczne egzekwowanie CI/CD pipelineprzez:

				
					xygeni validate --rules enums

				
			

Silna logika wymaga silnego typowania i walidacji

Czy używasz standard W przypadku typów wyliczeniowych języka C# lub złożonych typów wyliczeniowych flag każda wartość musi być jawna, sprawdzona i przetestowana. Niesprawdzone liczby całkowite lub nakładające się flagi mogą prowadzić do eskalacji uprawnień, niebezpiecznych zmian stanu i niespójności logicznych. Dzięki Xygeni zespoły mogą automatyzować wykrywanie i sprawdzanie poprawności definicji wyliczeń, co zapewnia silne typowanie, przewidywalną logikę i bezpieczne zachowanie od etapu programowania do wdrożenia.

sca-tools-oprogramowanie-narzędzia-analizy-kompozycji
Określ priorytety, rozwiąż problemy i zabezpiecz zagrożenia związane z oprogramowaniem
Załóż darmowe konto.
Nie wymagamy karty kredytowej.

Zabezpiecz rozwój i dostarczanie oprogramowania

z pakietem produktów Xygeni