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(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(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#.
- 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.







