Upozornění zabezpečení
Upozornění zabezpečení podporují bezpečnější knihovny a aplikace.Tato upozornění pomáhají zabránit chybám zabezpečení v programu.Pokud některá z těchto varování zakážete, měli byste v kódu jasně označit důvod a také informovat bezpečnostního úředníka vývoje projektu.
V tomto oddíle
Pravidlo |
Description |
---|---|
Metoda nastavuje vlastnost System.Data.IDbCommand.CommandText pomocí řetězce, který je sestaven z řetězcového argumentu metody.Toto pravidlo předpokládá, že řetězcový argument obsahuje vstup uživatele.Řetězec příkazu SQL sestavený ze vstupu uživatele je ohrožen útoky prostřednictvím injektáže SQL. |
|
CA2102: Zachycení výjimek bez CLSCompliant v obecné obslužné rutiny |
Člen v sestavení, které není označeno pomocí atributu RuntimeCompatibilityAttribute nebo je označeno atributem RuntimeCompatibility(WrapNonExceptionThrows = false) obsahuje blok catch, který zpracovává typ System.Exception a neobsahuje bezprostředně následující obecný blok catch. |
Metoda používá imperativní zabezpečení a může vytvářet oprávnění pomocí stavové informace nebo návratové hodnoty, která se může změnit pokud je žádost aktivní.Používejte deklarativní zabezpečení vždy, když je to možné. |
|
CA2104: Nelze deklarovat čtení pouze proměnlivých referenční typy |
Externě viditelný typ obsahuje externě viditelné pole měnitelného referenčního typu, které je určeno jen pro čtení.Měnitelný typ je typ, jehož instanční data lze upravit. |
Pokud použijete modifikátor pouze pro čtení (ReadOnly v jazyce Visual Basic) na pole, které obsahuje pole, toto pole nelze změnit tak, aby obsahovalo jiné pole.Avšak prvky pole, které jsou uloženy v poli určeném pouze pro čtení mohou být změněny. |
|
Metoda uplatňuje oprávnění a na volajícím nejsou vykonány žádné kontroly zabezpečení.Uplatňování oprávnění zabezpečení bez provedení jakékoliv kontroly zabezpečení, může zanechat ve vašem kódu zneužitelné slabé stránky zabezpečení. |
|
Metoda PermitOnly a akce zabezpečení CodeAccessPermission.Deny by měly být používány pouze těmi, kdo mají pokročilé znalosti o zabezpečení rozhraní .NET Framework.Kód používající tyto bezpečnostní akce by měl být podroben revizi zabezpečení. |
|
Veřejný nebo chráněný hodnotový typ je zabezpečen pomocí přístupu k datům nebo požadavků na propojení. |
|
Byla zjištěna veřejná nebo chráněná metoda zpracování událostí.Metody zpracování události by neměly být vystaveny, pokud to není nezbytně nutné. |
|
Ukazatel není soukromý, interní nebo jen pro čtení.Škodlivý kód může změnit hodnotu ukazatele, což potenciálně umožňuje přístup do libovolného umístění v paměti nebo může způsobit selhání aplikace nebo systému. |
|
Veřejný nebo chráněný typ obsahuje veřejné pole a je zabezpečen pomocí požadavků na propojení.Pokud má kód přístup k instanci typu, která je zabezpečena pomocí požadavku na propojení, nemusí kód vyhovět požadavku na propojení pro přístup k polím tohoto typu. |
|
Metoda by neměla mít pro stejnou akci deklarativní zabezpečení jak na úrovni metody, tak na úrovni typu. |
|
Toto pravidlo zjistí chyby, které mohou nastat, protože nespravovaný prostředek je finalizován v době, kdy je stále používán nespravovaným kódem. |
|
Když je atribut APTCA (AllowPartiallyTrustedCallers) uveden pro plně důvěryhodná sestavení a sestavení spustí kód v jiném sestavení, které neumožňuje volání částečně důvěryhodným sestavením, může se jednat o chybu v zabezpečení. |
|
Když je atribut APTCA (AllowPartiallyTrustedCallers) uveden pro plně důvěryhodná sestavení a typ v sestavení je odvozen z typu, který neumožňuje volání částečně důvěryhodným sestavením, může se jednat o chybu v zabezpečení. |
|
CA2118: Využití přezkoumání SuppressUnmanagedCodeSecurityAttribute |
Atribut SuppressUnmanagedCodeSecurityAttribute mění výchozí chování zabezpečení systému pro členy vykonávající nespravovaný kód, který používá zprostředkovatele komunikace s objekty COM nebo vyvolání platformy.Tento atribut slouží především ke zvýšení výkonu, ačkoliv nárůst výkonu může být spojen s významnými riziky zabezpečení. |
Odvoditelný veřejný typ poskytuje implementaci přepisovatelné metody vnitřního (Friend v jazyce Visual Basic) rozhraní.Chcete-li opravit porušení tohoto pravidla, zabraňte přepsání metody mimo sestavení. |
|
Tento typ má konstruktor, který přebírá objekt System.Runtime.Serialization.SerializationInfo a System.Runtime.Serialization.StreamingContext (podpis konstruktoru serializace).Tento konstruktor není zabezpečen pomocí kontroly zabezpečení, ale jeden nebo více běžných konstruktorů tohoto typu je zabezpečených. |
|
Systém volá statický konstruktor před vytvořením první instance typu nebo před tím, než jsou odkazovány jakékoli statické členy.Pokud statický konstruktor není privátní, může být volán jiným kódem než kódem systému.V závislosti na operacích, které jsou provedeny v konstruktoru, toto může způsobit neočekávané chování. |
|
Veřejný nebo chráněný člen má požadavek Link Demands a je volán členem, který neprovádí žádné bezpečnostní kontroly.Požadavek na odkaz kontroluje pouze oprávnění bezprostředního volajícího. |
|
Toto pravidlo přiřazuje metodu své základní metodě, kterou je buď rozhraní nebo virtuální metoda jiného typu, a poté v obou metodách srovnává požadavky na odkazy.Je-li toto pravidlo porušeno, může chybný volající obejít požadavek na odkaz pouhým voláním nezabezpečené metody. |
|
Veřejná nebo chráněná metoda obsahuje blok try/finally.Blok finally nejspíše obnovuje stav zabezpečení a sám není uzavřen v bloku finally. |
|
Veřejný neuzavřený typ je chráněn pomocí požadavku na propojení a má přepisovatelnou metodu.Tento typ ani tato metoda nejsou chráněny pomocí vyžádané dědičnosti. |
|
CA2136: Členové by nemělo být konfliktní průhlednost poznámky |
Ve 100% transparentním sestavení nemůže nastat kritický kód.Toto pravidlo analyzuje 100% transparentní sestavení pro jakoukoliv anotace SecurityCritical na úrovni typu, pole nebo metody. |
CA2147: Průhledné metody nelze použít zabezpečení nepodmíněných výrazů |
Toto pravidlo analyzuje všechny metody a typy v sestavení, které je buď 100% transparentní nebo smíšené transparentní/kritické a označí všechny deklarativní nebo imperativní použití Assert. |
CA2140: Průhledné kód musí odkaz zabezpečení důležitých položek |
Metody označené pomocí atributu SecurityTransparentAttribute volají neveřejné členy, které jsou označené jako SecurityCritical.Toto pravidlo analyzuje všechny metody a typy v sestavení, který je transparentní/kritické a označí všechna volání z transparentního kódu do neveřejného kritického kódu, který není označen jako SecurityTreatAsSafe. |
CA2130: Zabezpečení důležitých konstant by měly být průhledné |
Pro konstantní hodnoty není vynucována průhlednost, protože kompilátory vkládají konstantní hodnoty do kódu, aby za běhu programu nebylo zapotřebí žádné vyhledávání.Konstantní pole by měla být průhledná z pohledu zabezpečení, aby kontroloři kódu nepředpokládali, že průhledný kód nemůže ke konstantě přistoupit. |
---|---|
CA2131: Důležité typy zabezpečení není účastnit typu rovnocennost |
Typ se učástní porovnávání typu, přičemž typ samotný nebo jeho člen nebo pole je označen atributem SecurityCriticalAttribute.Toto pravidlo je spuštěno pro všechny kritické typy nebo typy obsahující kritické metody nebo pole, které se účastní porovnávání typu.Zjistí-li modul CLR takový typ, jeho načtení za běhu se nezdaří a je vyvolána výjimka TypeLoadException.Obvykle ke spuštění tohoto pravidla dochází pouze v případě, že uživatel implementuje porovnávání typů ručně a nepřenechává porovnávání typů na nástroji tlbimp a kompilátorech. |
CA2132: Musí být výchozí konstruktory důležité jako základní typ výchozí konstruktory |
Typy a členy, které mají atribut SecurityCriticalAttribute nelze použít kódem aplikace Silverlight.Typy a členy kritické na zabezpečení lze v knihovně tříd rozhraní .NET Framework aplikace Silverlight použít pouze prostřednictvím důvěryhodného kódu.Protože veřejné nebo chráněné konstrukce v odvozené třídě musí mít stejnou nebo větší transparentnost než jejich základní třída, třídu v aplikaci nelze odvodit z třídy označené jako SecurityCritical. |
CA2133: Delegáti musí navázat na metody s konzistentní průhlednost |
Toto upozornění je vyvoláno na metodě, která vytvoří vazbu delegáta označeného atributem SecurityCriticalAttribute na transparentní metodu nebo metodu označenou atributem SecuritySafeCriticalAttribute.Upozornění je také vyvoláno na metodě, která vytvoří vazbu transparentního nebo na bezpečnost kritického delegáta na kritickou metodu. |
CA2134: Metody uchovává konzistentní průhlednost při přepsání základní metody |
Toto pravidlo je vyvoláno, když metoda označená atributem SecurityCriticalAttribute přepíše transparentní metodu nebo metodu označenou atributem SecuritySafeCriticalAttribute.Toto pravidlo je vyvoláno, když transparentní metoda nebo metoda označená atributem SecurityCriticalAttribute přepíše metodu označenou atributem SecuritySafeCriticalAttribute.Pravidlo je použito při přepisování virtuální metody nebo implementaci rozhraní. |
LinkDemands se již nepoužívá v sadě pravidel zabezpečení úrovně 2.Namísto použití LinkDemands k vynucení zabezpečení v době kompilace JIT, označte metody, typy a pole pomocí atributu SecurityCriticalAttribute. |
|
CA2136: Členové by nemělo být konfliktní průhlednost poznámky |
Atributy transparentnosti jsou použity z prvků kódu většího rozsahu na prvky menšího rozsahu.Atributy transparentnosti prvků kódu, které mají větší rozsah, mají přednost před atributy transparentnosti prvků kódu, které jsou obsaženy v prvním prvku.Například třída označená atributem SecurityCriticalAttribute nemůže obsahovat metodu, která je označena atributem SecuritySafeCriticalAttribute. |
Metoda obsahuje kód, který nelze ověřit nebo vrací typ odkazem.Toto pravidlo je vyvoláno při pokusech transparentního kódu zabezpečení spustit jazyk MSIL (Microsoft Intermediate Language), který nelze ověřit.Pravidlo však neobsahuje úplný ověřovatel jazyka IL a místo toho k zachycení většiny porušení ověření jazyka MSIL používá heuristiky. |
|
CA2138: Průhledné metody musí nelze volat metody s atributem SuppressUnmanagedCodeSecurity |
Transparentní metoda zabezpečení volá metodu, která je označena atributem SuppressUnmanagedCodeSecurityAttribute. |
CA2139: Průhledné metody nelze použít atribut HandleProcessCorruptingExceptions |
Toto pravidlo je aplikováno, je-li jakákoliv metoda průhledná a pokusí se zpracovat výjimku poškozující proces použitím atributu HandleProcessCorruptedStateExceptionsAttribute.Výjimka poškozující proces je klasifikace výjimek dle specifikace CLR verze 4.0, například výjimka AccessViolationException.Atribut HandleProcessCorruptedStateExceptionsAttribute lze použít pouze metodami kritickými pro bezpečnost a bude ignorován, je-li použit u průhledných metod. |
CA2140: Průhledné kód musí odkaz zabezpečení důležitých položek |
Prvek kódu označený atributem SecurityCriticalAttribute je kritický pro zabezpečení.Transparentní metoda nemůže použít prvek kritický pro zabezpečení.Pokud se transparentní typ pokusí použít typ kritický pro zabezpečení, je vyvolána výjimka TypeAccessException, MethodAccessException nebo FieldAccessException. |
Metoda s transparentním zabezpečením volá metodu v sestavení, které není označeno atributem AllowPartiallyTrustedCallersAttribute (APTCA), nebo metodu s transparentním zabezpečením, která splňuje LinkDemand pro typ nebo metodu. |
|
Toto pravidlo je vyvoláno na transparentních metodách, které vyžadují pro přístup k nim LinkDemands.Kód transparentní pro zabezpečení by neměl být odpovědný za ověření zabezpečení operace, a proto by neměl požadovat oprávnění. |
|
CA2143: Průhledné metody není vhodné používat zabezpečení požadavků |
Kód transparentní pro zabezpečení by neměl být odpovědný za ověření zabezpečení operace, a proto by neměl požadovat oprávnění.Transparentní kód pro zabezpečení k učinění rozhodnutí o zabezpečení používá úplné požadavky a kritický kód pro zabezpečení by neměl spoléhat na to, že transparentní kód tyto úplné požadavky provede. |
Přezkoumání zabezpečení transparentního kódu není tak důkladné jako přezkoumání zabezpečení kritického kódu, protože transparentní kód nemůže provádět akce citlivé na zabezpečení.Sestavení, která jsou načtena z pole bajtů, nemohou být v transparentním kódu zaznamenána, takové pole bajtů může obsahovat kritický kód nebo ještě důležitější kód kritický na zabezpečení, který nepotřebuje být auditován. |
|
CA2145: Průhledné metod by nesmí být upraven pomocí SuppressUnmanagedCodeSecurityAttribute |
Na jakoukoli metodu, která volá metody označené atributem SuppressUnmanagedCodeSecurityAttribute, je implicitně umístěn LinkDemand.Tento LinkDemand vyžaduje, aby volající kód byl kriticky zabezpečený.Označení metody, která používá SuppressUnmanagedCodeSecurity, atributem SecurityCriticalAttribute zviditelňuje tento požadavek pro volající metody. |
CA2146: Typy musí být důležité jako rozhraní a základní typy |
Toto pravidlo je vyvoláno, když má odvozený typ atribut transparentnosti zabezpečení, který není tak kritický jako jeho základního typu nebo implementovaného rozhraní.Pouze kritické typy lze odvodit z kritických základních typů nebo mohou implementovat kritická rozhraní a pouze kritické typy nebo typy kritické pro zabezpečení mohou být odvozeny ze základních typů kritických na zabezpečení nebo mohou implementovat rozhraní kritické pro zabezpečení. |
CA2147: Průhledné metody nelze použít zabezpečení nepodmíněných výrazů |
U kódu označeného atributem SecurityTransparentAttribute není uděleno dostatečné oprávnění k vyhodnocení. |
Toto pravidlo je vyvoláno na jakékoli transparentní metodě, která přímo volá nativní kód, například prostřednictvím P/Invoke.Porušení tohoto pravidla vede k vyvolání výjimky MethodAccessException v modelu transparentnosti úrovně 2 a k úplnému požadavku na nespravovaný kód v modelu transparentnosti úrovně 1. |