Udostępnij za pośrednictwem


Ostrzeżenia dotyczące zabezpieczeń

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: Przejrzyj kwerend SQL dla 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, który jest zbudowany z danych wejściowych użytkownika jest narażony na ataki przez iniekcję SQL.

CA2102: Przechwytywać wyjątków nie CLSCompliant w ogólne programy obsługi

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

CA2103: Przegląd nadrzędnych zabezpieczeń

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 kiedy żądanie jest aktywne.Należy używać zabezpieczeń deklaracyjnych wszędzie, gdzie to możliwe.

CA2104: Nie są deklarowane odczytu odniesienia tylko tych typów

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

CA2105: Pól tablicy nie są odczytywane tylko

Po zastosowaniu modyfikatora tylko do odczytu (ReadOnly w 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, które są przechowywane w polu tylko do odczytu.

CA2106: Secure deklaracji rozkazujących

Metoda potwierdza uprawnienia i żadne sprawdzanie bezpieczeństwa nie są wykonywane na obiekcie wywołującym.Potwierdzanie uprawnienia zabezpieczeń bez wykonywania kontroli zabezpieczeń można pozostawić zdatną do wykorzystania słabość zabezpieczeń w kodzie.

CA2107: Przegląd Odmów i zezwolić na użycie tylko

Metoda PermitOnly i akcje zabezpieczeń CodeAccessPermission.Deny powinny być używane tylko przez tych, którzy mają zaawansowaną wiedze o zabezpieczeniach .NET Framework .Kod, który używa tych akcji zabezpieczeń powinien przejść przegląd zabezpieczeń.

CA2108: Zabezpieczenia deklaracyjne Przegląd w przypadku typów wartości

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

CA2109: Przejrzyj widoczne procedury 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 lub 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 lub systemu.

CA2112: Zabezpieczonych typów nie powinny wystawiać 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, który jest zabezpieczony przez zapotrzebowania na łącza, kod nie musi spełniać zapotrzebowania na łącza, aby uzyskać dostęp do pól typu.

CA2114: Metody powinny być nadzbiorem uprawnień typu

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

CA2115: Wywołanie GC.Utrzymywania aktywności podczas korzystania z zasobów macierzystych

Ta reguła wykrywa błędy, które mogą wystąpić, ponieważ niezarządzany zasób jest zakończony podczas gdy wciąż jest używany w kodzie niezarządzanym.

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

Gdy atrybut APTCA (AllowPartiallyTrustedCallers) jest obecny zestawie całkowicie zaufanym i wykonuje kod w innym zestawie, który nie zezwala na dostęp częściowo zaufanych wywołań, możliwe jest wykorzystanie luk w bezpieczeństwie.

CA2117: Typy APTCA powinny rozszerzać tylko typy bazowe APTCA

Gdy atrybut APTCA (AllowPartiallyTrustedCallers) jest obecny w pełni zaufanym zestawie i typ w zestawie dziedziczy z typu, który nie zezwala na dostęp częściowo zaufanych wywołań, możliwe jest wykorzystanie luk w bezpieczeństwie.

CA2118: Użycie Przegląd SuppressUnmanagedCodeSecurityAttribute

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

CA2119: Zapieczętować metod zadowalających prywatne interfejsy

Dziedziczny typ publiczny dostarcza implementację metody, którą można zastąpić, wewnętrznego (Friend w Visual Basic) interfejsu.Aby naprawić naruszenie tej zasady, należy zapobiegać przed zastąpieniem metody poza zestawem.

CA2120: Konstruktory serializacji bezpiecznego

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 więcej regularnych konstruktory typu są zabezpieczone.

CA2121: Konstruktory statyczne powinny być prywatne

System wywołuje statyczny konstruktor przed stworzeniem pierwszego wystąpienia typu lub przed tym, jak następuje odwołanie 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 ujawniać pośrednio metod żądających łącza

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

CA2123: Ustawienie atrybutu LinkDemand powinny być identyczne base

Ta reguła dopasowywuje metodę do jej metody podstawowej, która jest interfejsem lub metodą wirtualna w innym typie, 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żna pominąć zapotrzebowanie na łącza przez wywołanie niezabezpieczonej metody.

CA2124: Oblewanie podatne na koniec klauzul w zewnętrznym spróbuj

Metoda publiczne lub chronione 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 LinkDemand wymagają dziedziczenie zapotrzebowania

Niezamkniętych 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: Członków nie powinien mieć konflikt przezroczystość adnotacji

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

CA2147: Przezroczyste metody nie mogą używać zabezpieczeń potwierdza

Ta reguła analizuje wszystkie metody i typów w zestawie, który jest w 100% przeźroczysty lub mieszany przezroczysto-krytyczny i zaznacza deklaratywne lub imperatywne użycie Assert.

CA2140: Przejrzysty kod nie musi odwołać krytycznych elementów zabezpieczeń

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

CA2130: Stałe krytycznych 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 krytycznych zabezpieczeń nie mogą uczestniczyć w równoważności typu

Typ uczestniczy w równoważeniu typu i albo sam typ, albo element członkowski, albo pole, albo typ jest oznaczony atrybutem SecurityCriticalAttribute.Ta reguła jest uruchamiana na wszystkich typach krytycznych lub typach, które zawierają 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 wyjątek TypeLoadException w czasie wykonywania.Zazwyczaj ta reguła uruchamiany tylko wtedy, gdy użytkownicy implementują równoważenie typu ręcznie, zamiast wykonać równoważenie typu polegając na tlbimp i kompilatorach.

CA2132: Konstruktory domyślne muszą być co najmniej tak ważne, jak konstruktory domyślny typ podstawowy

Typów i elementów członkowskich, których mają SecurityCriticalAttribute, nie można używać przez kod aplikacji Silverlight.Typy krytycznych dla bezpieczeństwa i członkowie mogą być używani tylko przez zaufany kodu w .NET Framework dla biblioteki klas Silverlight.Ponieważ publiczna lub chroniona konstrukcja w klasie pochodnej musi mieć taką samą lub większą przejrzystość niż jego klasa podstawowa, klasy w aplikacji nie mogą pochodzić z klasy oznaczone jako SecurityCritical.

CA2133: Delegatów należy powiązać metody spójne przejrzystości

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

CA2134: Metody muszą przechowywać spójne przejrzystości podczas zastępowania metody podstawowej

Ta reguła jest uruchamiana, gdy metoda oznaczona za pomocą SecurityCriticalAttribute zastępuje metodę, która jest przezroczysta lub oznaczona za pomocą 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: Poziom 2 zestawów nie powinna 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: Członków nie powinien mieć konflikt przezroczystość adnotacji

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, która jest oznaczona za pomocą atrybutu SecuritySafeCriticalAttribute.

CA2137: Przezroczyste metod musi zawierać tylko sprawdzalnych IL

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

CA2138: Przezroczyste metody nie musi wywołać metody z atrybutem SuppressUnmanagedCodeSecurity

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

CA2139: Przezroczyste metody nie mogą 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 wersji 4.0 wątków takich jak AccessViolationException.Atrybut HandleProcessCorruptedStateExceptionsAttribute może być używany tylko przez krytyczne pod względem bezpieczeństwa metody i będzie ignorowany jeśli zostanie zastosowany do metody przezroczystej.

CA2140: Przejrzysty kod nie musi odwołać krytycznych elementów zabezpieczeń

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

CA2141: przezroczyste metody nie muszą 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 LinkDemand dla typu lub metody.

CA2142: Przejrzysty kod powinny być chronione nie z LinkDemands

Ta reguła jest uruchamiana na przezroczystych metodach wymagających 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: Przezroczyste metody nie należy używać zabezpieczeń zapotrzebowania

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ń, aby podejmować decyzje związane z zabezpieczeniami i kod krytyczny pod względem zabezpieczeń nie powinien polegać na kodzie przezroczystym, aby wykonywać pełne żądanie.

CA2144: Przejrzysty kod nie powinien być ładowany zespołów z tablice bajtów

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: Przezroczyste metod powinny nie być ozdobione SuppressUnmanagedCodeSecurityAttribute

Metody, które są oznaczone przez atrybut SuppressUnmanagedCodeSecurityAttribute mają niejawny LinkDemand umieszczony na dowolnej metody, który je wywołuje.Ten LinkDemand wymaga, że kod wywołujący jest krytycznych dla bezpieczeństwa.Oznaczanie metody, która używa SuppressUnmanagedCodeSecurity poprzez używanie 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 typów podstawowych i interfejsów

Ta reguła jest uruchamiana, gdy typ pochodny ma atrybut przezroczystości pod względem zabezpieczeń, który nie jest tak 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: Przezroczyste metody nie mogą używać zabezpieczeń potwierdza

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

CA2149: Przezroczyste metody nie musi wywołać do kodu macierzystego

Ta reguła jest uruchamiana dla każdej przezroczystej metody, która wywołuje bezpośrednio kod macierzysty, na przykład poprzez 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.