Udostępnij za pośrednictwem


Ostrzeżenia o zabezpieczeniach

Ostrzeżenia o zabezpieczeniach obsługują bezpieczniejsze biblioteki i aplikacje.Ostrzeżenia te pomagają zapobiec usterkom w zabezpieczeniach w programie.Przyczynę wyłączenia któregokolwiek z tych ostrzeżeń należy wyraźnie oznaczyć w kodzie i poinformować o tym osobę odpowiedzialną za bezpieczeństwo w projekcie.

W tej sekcji

Reguła

Opis

CA2100: Należy przeglądnąć zapytania SQL w poszukiwaniu luk w zabezpieczeniach

Metoda ustawia właściwość System.Data.IDbCommand.CommandText przez użycie ciągu, który jest zbudowany z argumentem ciągu do metody.Zasada ta zakłada, że argument ciągu zawiera dane wejściowe użytkownika.Ciąg polecenia SQL zbudowany z danych wejściowych użytkownika jest narażony na ataki przez wstrzyknięcie kodu SQL.

CA2102: Przechwytuj wyjątki inne niż CLSCompliant w ogólnej obsłudze wyjątków

Element członkowski w zestawie, który nie jest oznaczony za pomocą atrybutu RuntimeCompatibilityAttribute lub jest oznaczony jako RuntimeCompatibility(WrapNonExceptionThrows = false), zawiera blok catch obsługujący wyjątek System.Exception i nie zawiera bezpośrednio następującego ogólnego bloku catch.

CA2103: Przejrzyj zabezpieczenia imperatywne

Metoda używa imperatywnych zabezpieczeń i może konstruować uprawnienia za pomocą informacji o stanie lub wartości zwrotnych, które można zmienić, podczas gdy żądanie jest aktywne.Należy używać zabezpieczeń deklaracyjnych wszędzie, gdzie to możliwe.

CA2104: Nie deklaruj zmiennych typów referencyjnych tylko do odczytu

Typ widoczny z zewnątrz zawiera widoczne na zewnątrz pole tylko do odczytu, które jest typu referencji zmiennej.Typ zmienny to typ, którego dane wystąpienia mogą być modyfikowane.

CA2105: Pola tablicy nie powinny być tylko do odczytu

Po zastosowaniu modyfikatora tylko do odczytu (ReadOnly w edytorze Visual Basic) do pola, które zawiera tablicę, pola nie można zmienić, aby odwoływało się do innej tablicy.Można jednak zmienić elementy tablicy przechowywane w polu tylko do odczytu.

CA2106: Potwierdzanie zabezpieczeń

Metoda potwierdza uprawnienia i żadne sprawdzenia zabezpieczeń nie są wykonywane na obiekcie wywołującym.Potwierdzanie uprawnienia zabezpieczeń bez sprawdzania zabezpieczeń może pozostawić zdatną do wykorzystania słabość zabezpieczeń w kodzie.

CA2107: Przejrzyj użycie akcji Deny i Permit Only

Metoda PermitOnly i akcje zabezpieczeń CodeAccessPermission.Deny powinny być używane tylko przez tych, którzy mają zaawansowaną wiedzę o zabezpieczeniach .NET Framework.Kod, który używa tych akcji zabezpieczeń, należy poddać przeglądowi zabezpieczeń.

CA2108: Należy przeglądnąć zabezpieczenia deklaratywne typów wartościowych

Publiczny lub chroniony typ wartości jest zabezpieczony przez dostęp do danych lub zapotrzebowanie na łącza.

CA2109: Przejrzyj widoczne programy obsługi zdarzeń

Wykryto publiczną lub chronioną metodę obsługi zdarzeń.Metody obsługi zdarzeń nie powinny być udostępnione, chyba że jest to absolutnie konieczne.

CA2111: Wskaźniki nie powinny być widoczne

Wskaźnik nie jest prywatny, wewnętrzny ani tylko do odczytu.Złośliwy kod może zmienić wartość wskaźnika, potencjalnie umożliwiając dostęp do dowolnego miejsca w pamięci lub powodując błędy aplikacji bądź systemu.

CA2112: Typy zabezpieczone nie powinny uwidaczniać pól

Typ publiczny lub chroniony zawiera pola publiczne i jest zabezpieczony przez zapotrzebowania na łącza.Jeśli kod ma dostęp do wystąpienia typu zabezpieczonego przez żądanie łącza, kod nie musi spełniać zapotrzebowania na łącza, aby uzyskać dostęp do pól typu.

CA2114: Metody zabezpieczeń powinny być nadzbiorem typu

Metoda nie powinna mieć zabezpieczeń deklaratywnych zarówno na poziomie metody, jak i na poziomie typu dla tej samej akcji.

CA2115: Wywołaj GC.KeepAlive gdy używasz zasobów natywnych

Ta reguła wykrywa błędy, które mogą wystąpić, ponieważ kończy się działanie niezarządzanego zasobu, a wciąż jest on używany w kodzie niezarządzanym.

CA2116: Metody APTCA powinny wywoływać tylko metody APTCA

Gdy atrybut APTCA (AllowPartiallyTrustedCallers) jest obecny w zestawie całkowicie zaufanym i wykonuje kod w innym zestawie, który nie zezwala na dostęp częściowo zaufanych wywołań, mogą zostać wykorzystane luki w zabezpieczeniach.

CA2117: Typy APTCA powinny rozszerzać tylko typy bazowe APTCA

Gdy atrybut APTCA (AllowPartiallyTrustedCallers) jest obecny w całkowicie zaufanym zestawie i typ w zestawie dziedziczy z typu, który nie zezwala na dostęp częściowo zaufanych wywołań, mogą zostać wykorzystane luki w zabezpieczeniach.

CA2118: Przegląd wykorzystania SuppressUnmanagedCodeSecurityAttribute

SuppressUnmanagedCodeSecurityAttribute zmienia domyślne zachowanie systemu zabezpieczeń dla elementów członkowskich wykonujących kod niezarządzany, który używa wywołań międzyoperacyjnych COM lub platformy.Atrybut ten jest używany głównie w celu zwiększenia wydajności; jednak wzrost wydajności powoduje znaczące zagrożenia dla bezpieczeństwa.

CA2119: Zapieczętuj metody, które spełniają interfejsy prywatne

Dziedziczny typ publiczny dostarcza zastępowalną implementację metody wewnętrznego interfejsu (Friend w edytorze Visual Basic).Aby naprawić naruszenie tej zasady, należy zapobiegać zastąpieniu metody poza zestawem.

CA2120: Zabezpieczaj konstruktory serializacji

Typ ten ma konstruktor, który przyjmuje obiekt System.Runtime.Serialization.SerializationInfo i obiekt System.Runtime.Serialization.StreamingContext (podpis konstruktora serializacji).Ten konstruktor nie jest zabezpieczony przez sprawdzanie zabezpieczeń, ale jeden lub kilka regularnych konstruktorów typu jest zabezpieczonych.

CA2121: Konstruktory statyczne powinny być prywatne

System wywołuje statyczny konstruktor przed utworzeniem pierwszego wystąpienia typu lub przed odwołaniem do któregokolwiek ze statycznych elementów członkowskich.Jeśli konstruktor statyczny nie jest prywatny, może być wywołany przez kod inny niż system.W zależności od operacji, które są wykonywane w konstruktorze, może to spowodować nieoczekiwane zachowanie.

CA2122: Nie należy pośrednio ujawniać metod w żądaniach konsolidacji

Element członkowski publiczny lub chroniony ma zapotrzebowanie na łącza i jest wywoływany przez element członkowski, który nie sprawdza zabezpieczeń.Zapotrzebowanie na łącza sprawdza uprawnienia tylko bezpośredniego wywołującego.

CA2123: Zastąpienia żądań konsolidacji powinny być identyczne z bazowym

Ta reguła dopasowuje metodę do jej metody podstawowej, która jest interfejsem lub metodą wirtualną innego typu, a następnie porównuje zapotrzebowania na łącza na każdym z nich.Jeśli zasada ta jest naruszona, złośliwy wywołujący może pominąć zapotrzebowanie na łącza przez wywołanie niezabezpieczonej metody.

CA2124: Kodowanie wrażliwych klauzul finally w zewnętrznym try

Metoda publiczna lub chroniona zawiera blok try/finally.Wygląda na to, że blok finally resetuje stan zabezpieczeń i sam nie jest ujęty w bloku finally.

CA2126: Typ żądań konsolidacji wymaga żądań dziedziczenia

Niezamknięty typ publiczny jest chroniony za pomocą zapotrzebowania na łącza i ma metodę, którą można zastąpić.Ani typ, ani metoda nie są chronione za pomocą żądania dziedziczenia.

CA2136: Elementy członkowskie nie powinny mieć skonfliktowanych adnotacji przezroczystości

Krytyczny kod nie może wystąpić w zestawie, który jest w 100% przezroczysty.Ta reguła analizuje zestawy w 100% przezroczyste dla adnotacji SecurityCritical na poziomie typu, pola i metody.

CA2147: Jawne metody nie mogą używać potwierdzeń zabezpieczeń

Reguła ta analizuje wszystkie metody i typy w zestawie, który jest w 100% przezroczysty lub mieszany przezroczysto-krytyczny i zaznacza deklaratywne lub imperatywne użycie potwierdzenia.

CA2140: Jawny kod nie może odwoływać się do elementów krytycznych dla zabezpieczeń

Metody, które są oznaczone przez atrybut SecurityTransparentAttribute, wywołują niepubliczne elementy członkowskie, które są oznaczone jako SecurityCritical.Ta reguła analizuje wszystkie metody i typy w zestawie mieszanym przezroczysto-krytycznym i oznacza wszelkie wywołania z przezroczystego kodu do niepublicznego krytycznego kodu, który nie jest oznaczony jako SecurityTreatAsSafe.

CA2130: Krytyczne stałe zabezpieczeń powinny być przezroczyste

Wymuszanie przezroczystości nie jest wymuszane dla wartości stałych, ponieważ kompilatory wbudowują stałe wartości, tak aby nie było wymagane żadne wyszukiwanie w czasie wykonywania.Stałe pola powinny być przezroczyste dla zabezpieczeń, tak aby recenzenci kodu nie zakładali, że przezroczysty kod nie może uzyskać dostępu do stałej.

CA2131: Typy krytyczne dla zabezpieczeń nie mogą brać udziału w równoważnikach typów

Typ uczestniczy w równoważeniu typu i albo sam typ, albo jego element członkowski lub pole jest oznaczone atrybutem SecurityCriticalAttribute.Ta reguła jest uruchamiana na wszystkich typach krytycznych lub typach zawierających metody krytyczne lub pola, które uczestniczą w równoważeniu typu.Gdy CLR wykryje taki typ, uniemożliwia jego załadowanie, wywołując w czasie wykonywania wyjątek TypeLoadException.Zazwyczaj ta reguła uruchamiana jest tylko wtedy, gdy użytkownicy implementują równoważenie typu ręcznie, zamiast wykonać je, opierając się na otokach tlbimp i kompilatorach.

CA2132: Konstruktory domyślne muszą być co najmniej tak krytyczne, jak podstawowe konstruktory domyślne

Typy i elementy członkowskie, które mają atrybut SecurityCriticalAttribute, nie mogą być używane przez kod aplikacji Silverlight.Typy krytyczne dla bezpieczeństwa i członkowie mogą być używani tylko przez zaufany kod w środowisku .NET Framework dla biblioteki klas Silverlight.Ze względu na to, że publiczna lub chroniona konstrukcja w klasie pochodnej musi mieć taką samą lub większą przejrzystość jak jej klasa podstawowa, klasy w aplikacji nie mogą pochodzić z klasy oznaczonej jako SecurityCritical.

CA2133: Delegatów należy powiązać z metodami ze spójną jawnością

To ostrzeżenie uruchamiane jest na metodzie wiążącej obiekt delegowany, oznaczony za pomocą atrybutu SecurityCriticalAttribute, do metody, która jest przezroczysta lub oznaczona za pomocą atrybutu SecuritySafeCriticalAttribute.Ostrzeżenie jest także uruchamiane na metodzie wiążącej obiekt delegowany, który jest przezroczysty lub bezpieczny-krytyczny dla metody krytycznej.

CA2134: Metody muszą przechowywać spójną jawność podczas nadpisywania metod bazowych

Ta reguła jest uruchamiana, gdy metoda oznaczona za pomocą atrybutu SecurityCriticalAttribute zastępuje metodę, która jest przezroczysta lub oznaczona za pomocą atrybutu SecuritySafeCriticalAttribute.Reguła ta jest również uruchamiana, gdy metoda przezroczysta lub oznaczona atrybutem SecuritySafeCriticalAttribute zastępuje metodę oznaczoną atrybutem SecurityCriticalAttribute.Reguła jest stosowana podczas zastępowania metody wirtualnej lub implementującej interfejs.

CA2135: Zestawy poziomu 2 nie powinny zawierać LinkDemands

LinkDemands są przestarzałe w zestawie reguł zabezpieczeń poziomu 2.Zamiast używania LinkDemands do wymuszenia zabezpieczeń w czasie kompilacji just in time (JIT), należy oznaczyć metody, typy i pola za pomocą atrybutu SecurityCriticalAttribute.

CA2136: Elementy członkowskie nie powinny mieć skonfliktowanych adnotacji przezroczystości

Atrybuty przezroczystości są stosowane od elementów kodu o większym zakresie do elementów o mniejszym zakresie.Atrybuty przezroczystości elementów kodu z większym zakresem mają pierwszeństwo przed atrybutami przejrzystości elementów kodu, które są zawarte w pierwszym elemencie.Na przykład klasa, która jest oznaczona za pomocą atrybutu SecurityCriticalAttribute, nie może zawierać metody oznaczonej atrybutem SecuritySafeCriticalAttribute.

CA2137: Jawne metody muszą zawierać tylko weryfikowalne IL

Metoda zawiera nieweryfikowalny kod lub zwraca typ przez odwołanie.Ta reguła jest uruchamiana podczas próby wykonywania przez kod przezroczysty pod względem zabezpieczeń nieweryfikowalnego MSIL (Microsoft Intermediate Language).Jednak reguła nie zawiera pełnej weryfikacji IL i używa heurystyki do wykrywania większości naruszeń weryfikacji MSIL.

CA2138: Jawne metody nie mogą wywoływać metod z atrybutem SuppressUnmanagedCodeSecurity

Metoda przezroczysta pod względem bezpieczeństwa wywołuje metodę, która jest oznaczona za pomocą atrybutu SuppressUnmanagedCodeSecurityAttribute.

CA2139: Jawne metody mogą nie używać atrybutu HandleProcessCorruptingExceptions

Ta reguła jest wywoływana przez każdą metodę, która jest przejrzysta i próbuje obsłużyć wyjątek uszkodzenia procesu przy użyciu atrybutu HandleProcessCorruptedStateExceptionsAttribute.Wyjątek uszkadzający proces to klasyfikacja wyjątków CLR w wersji 4.0 wątków takich jak AccessViolationException.Atrybut HandleProcessCorruptedStateExceptionsAttribute może być używany tylko przez metody krytyczne pod względem bezpieczeństwa i będzie ignorowany, jeśli zostanie zastosowany do metody przezroczystej.

CA2140: Jawny kod nie może odwoływać się do elementów krytycznych dla zabezpieczeń

Element kodu, który jest oznaczony za pomocą atrybutu SecurityCriticalAttribute, jest krytyczny dla bezpieczeństwa.Przezroczysta metoda nie może użyć elementu krytycznego dla zabezpieczeń.Jeśli przezroczysty typ próbuje użyć typu krytycznego dla zabezpieczeń, zgłaszane są wyjątki TypeAccessException, MethodAccessException lub FieldAccessException.

Metody CA2141:Transparent nie mogą spełniać LinkDemands

Metoda przezroczysta pod względem zabezpieczeń wywołuje metodę z zestawu, która nie jest oznaczona atrybutem AllowPartiallyTrustedCallersAttribute (APTCA), lub metoda przezroczysta pod względem zabezpieczeń spełnia żądanie LinkDemand dla typu lub metody.

CA2142: Jawny kod nie powinien być chroniony za pomocą LinkDemands

Ta reguła jest uruchamiana na przezroczystych metodach wymagających żądania LinkDemands, aby uzyskać do nich dostęp.Przezroczysty kod zabezpieczeń nie powinien być odpowiedzialny za weryfikację zabezpieczeń operacji, a zatem nie powinien wymagać uprawnień.

CA2143: Jawne metody nie powinny używać żądań zabezpieczeń

Przezroczysty kod zabezpieczeń nie powinien być odpowiedzialny za weryfikację zabezpieczeń operacji, a zatem nie powinien wymagać uprawnień.Przejrzysty pod względem bezpieczeństwa kod powinien używać pełnych żądań do podejmowania decyzji związanych z zabezpieczeniami, a kod krytyczny pod względem zabezpieczeń nie powinien opierać się na kodzie przezroczystym do wykonywania pełnego żądania.

CA2144: Jawny kod nie powinien ładować zestawów z tablic bajtowych

Przegląd zabezpieczeń dla kodu przezroczystego nie jest tak dokładny jak kodu krytycznego pod względem bezpieczeństwa, ponieważ przezroczysty kod nie może wykonywać czynności wrażliwych pod względem bezpieczeństwa.Zestawy, ładowane z tablicy bajtowej, mogą nie być niezauważone w przezroczystym kodzie, a ta tablica bajtów może zawierać krytyczny albo, co ważniejsze, krytyczny dla bezpieczeństwa kod, który powinien być poddany inspekcji.

CA2145: Jawne metody nie powinny być dekorowane za pomocą SuppressUnmanagedCodeSecurityAttribute

Metody, które są oznaczone przez atrybut SuppressUnmanagedCodeSecurityAttribute, mają niejawne żądanie LinkDemand umieszczone na dowolnej metodzie, która je wywołuje.Ten element LinkDemand wymaga, aby kod wywołujący był krytyczny dla bezpieczeństwa.Oznaczanie metody, która używa zabezpieczenia SuppressUnmanagedCodeSecurity poprzez użycie atrybutu SecurityCriticalAttribute, sprawia, że wymóg ten jest bardziej oczywisty dla obiektów wywołujących metodę.

CA2146: Typy muszą być co najmniej tak ważne, jak ich typy podstawowe i interfejsy

Ta reguła jest uruchamiana, gdy typ pochodny ma atrybut przezroczystości pod względem zabezpieczeń, który nie jest tak krytyczny, jak jego typ podstawowy lub zaimplementowany interfejs.Tylko typy krytyczne pod względem zabezpieczeń mogą pochodzić od podstawowych typów krytycznych lub implementować interfejsy krytyczne, a tylko typy krytyczne lub krytyczne dla bezpieczeństwa mogą pochodzić od podstawowych typów krytycznych dla bezpieczeństwa lub implementować interfejsy krytyczne dla bezpieczeństwa.

CA2147: Jawne metody nie mogą używać potwierdzeń zabezpieczeń

Kod, który jest oznaczony jako SecurityTransparentAttribute, nie ma przyznanego wystarczającego uprawnienia do potwierdzenia.

CA2149: Jawne metody nie mogą wywoływać kodu natywnego

Ta reguła jest uruchamiana dla każdej przezroczystej metody, która wywołuje bezpośrednio kod natywny, na przykład przez metodę P/Invoke.Naruszenie tej zasady prowadzi do wyjątku MethodAccessException w poziomie 2 modelu przezroczystości i pełnego żądania dla UnmanagedCode w modelu przezroczystości poziomu 1.

CA2151: Pola typu krytycznego powinny być bezpieczne-krytyczne

Aby używać typów krytycznych pod względem zabezpieczeń, kod odwołujący się do typu musi być albo krytyczny pod względem zabezpieczeń, albo bezpieczny-krytyczny pod względem zabezpieczeń.Ta zasada obowiązuje nawet w przypadku odwołania pośredniego.Dlatego pole mające zabezpieczenia przezroczyste lub pole bezpieczne-krytyczne pod względem zabezpieczeń jest mylące, ponieważ przezroczysty kod nadal nie będzie mógł uzyskać dostępu do pola.

CA5122 Deklaracje P/Invoke nie powinny być bezpieczne-krytyczne

Metody są oznaczone jako SecuritySafeCritical, gdy wykonują operacje zależne od zabezpieczeń, ale mogą być również bezpiecznie używane przez kod przezroczystości.Kod przezroczystości może nigdy bezpośrednio nie wywołać kodu natywnego za pośrednictwem metody P/Invoke.Dlatego oznakowanie metody P/Invoke jako bezpiecznej-krytycznej pod względem zabezpieczeń nie umożliwi jej wywołania kodu przezroczystości i jest mylące dla analizy zabezpieczeń.