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 upozorně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 |
Popis |
---|---|
Metoda nastavuje vlastnost System.Data.IDbCommand.CommandText pomocí řetězce, který je sestaven z řetězcového argumentu k metodě.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: Zachycujte výjimky bez CLSCompliant v obecné obslužné rutině |
Člen v sestavení, které není označeno pomocí atributu RuntimeCompatibilityAttribute nebo je označeno atributem RuntimeCompatibility(WrapNonExceptionThrows = false), obsahuje zachytávací blok, který zpracovává typ System.Exception a neobsahuje bezprostředně následující obecný zachytávací blok. |
Metoda používá imperativní zabezpečení a může vytvářet oprávnění pomocí informací o stavu nebo návratových hodnot, které se mohou změnit, pokud je žádost aktivní.Používejte deklarativní zabezpečení vždy, když je to možné. |
|
CA2104: Nedeklaruje proměnlivé odkazové typy pouze pro čtení |
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 jen pro čtení (ReadOnly v jazyce Visual Basic) na pole, které obsahuje pole, toto pole nelze změnit tak, aby odkazovalo na jiné pole.Avšak prvky pole, které jsou uloženy v poli určeném jen 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í.Uplatně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ů propojení. |
|
Byla zjištěna veřejná nebo chráněná metoda zpracování událostí.Metody zpracování událostí 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ů 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é nepovoluje částečně důvěryhodné volající, může se jednat o chybu v zabezpečení. |
|
CA2117: Typy APTCA by měl rozšířit pouze základní typy APTCA |
Když je atribut APTCA (AllowPartiallyTrustedCallers) uveden pro plně důvěryhodná sestavení a typ v sestavení je odvozen z typu, který nepovoluje částečně důvěryhodné volající, může se jednat o chybu v zabezpečení. |
CA2118: Zkontrolujte použití 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í. |
CA2119: Zapečeťte metody, které vyhovují privátním rozhraním |
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 objekt System.Runtime.Serialization.StreamingContext (podpis serializace konstruktoru).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ředtím, než jsou odkazovány jakékoli statické členy.Pokud statický konstruktor není soukromý, 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, to může způsobit neočekávané chování. |
|
Veřejný nebo chráněný člen má požadavky propojení a je volán členem, který neprovádí žádné bezpečnostní kontroly.Požadavek propojení kontroluje pouze oprávnění bezprostředního volajícího. |
|
CA2123: Požadavky na přepsání odkazu musejí být identické s bází |
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 propojení.Je-li toto pravidlo porušeno, může chybný volající obejít požadavek propojení pouhým voláním nezabezpečené metody. |
CA2124: Zabalte ohroženou klauzuli finally do vnějšího bloku try |
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. |
CA2126: Požadavky propojení typů vyžadují dědičnost požadavků |
Veřejný nezapečetěný typ je chráněn pomocí požadavku propojení a má přepisovatelnou metodu.Tento typ ani tato metoda nejsou chráněny pomocí vyžádané dědičnosti. |
CA2136: Členy nesmějí mít konfliktní poznámky transparentnosti |
Ve 100% transparentním sestavení nemůže nastat kritický kód.Toto pravidlo analyzuje 100% transparentní sestavení pro jakékoliv anotace SecurityCritical na úrovni typu, pole nebo metody. |
CA2147: Transparentní metody nemusejí podporovat použití nepodmíněných výrazů zabezpečení |
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í výrazu Assert. |
CA2140: Transparentní kód nesmí odkazovat na položky kritické pro zabezpečení |
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á nejsou označena jako SecurityTreatAsSafe. |
CA2130: Konstanty kritické pro zabezpečení musejí být transparentní |
Pro konstantní hodnoty není vynucována transparentnost, 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 transparentní z pohledu zabezpečení, aby kontroloři kódu nepředpokládali, že transparentní kód nemůže ke konstantě přistoupit. |
---|---|
CA2131: Typy kritické pro zabezpečení nemusejí podporovat účast na ekvivalenci typů |
Typ se účastní porovnávání typů, přičemž typ samotný nebo jeho člen nebo pole je označen atributem SecurityCriticalAttribute.Toto pravidlo je vyvoláno pro všechny kritické typy nebo typy obsahující kritické metody nebo pole, která se účastní porovnávání typů.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: Výchozí konstruktory nesmějí být méně kritické než výchozí konstruktory základního typu |
Typy a členy, které mají atribut SecurityCriticalAttribute, nelze použít kódem aplikace Silverlight.Typy a členy kritické z hlediska zabezpečení lze použít pouze prostřednictvím důvěryhodného kódu v knihovně tříd rozhraní .NET Framework aplikace Silverlight.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, nelze třídu v aplikaci odvodit z třídy označené jako SecurityCritical. |
CA2133: Delegáti musejí být připojeni k metodám s konzistentní transparentností |
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 delegáta nebo bezpečně kritického delegáta na kritickou metodu. |
CA2134: Metody musejí při přepisování základních metod zachovávat konzistentní transparentnost |
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 SecuritySafeCriticalAttribute přepíše metodu označenou atributem SecurityCriticalAttribute.Pravidlo je použito při přepisování virtuální metody nebo implementaci rozhraní. |
Pravidla LinkDemand jsou v sadě pravidel zabezpečení úrovně 2 již zastaralá.Namísto použití pravidel LinkDemand k vynucení zabezpečení v době kompilace JIT označte metody, typy a pole pomocí atributu SecurityCriticalAttribute. |
|
CA2136: Členy nesmějí mít konfliktní poznámky transparentnosti |
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. |
CA2137: Transparentní metody musejí obsahovat pouze ověřitelné IL |
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: Transparentní metody nesmějí volat metody s atributem SuppressUnmanagedCodeSecurity |
Transparentní metoda zabezpečení volá metodu, která je označena atributem SuppressUnmanagedCodeSecurityAttribute. |
CA2139: Transparentní metody nemusejí podporovat použití atributu HandleProcessCorruptingExceptions |
Toto pravidlo je vyvoláno, je-li jakákoliv metoda transparentní 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, jako 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 transparentních metod. |
CA2140: Transparentní kód nesmí odkazovat na položky kritické pro zabezpečení |
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. |
Transparentní metoda (z hlediska zabezpečení) volá metodu v sestavení, které není označeno atributem AllowPartiallyTrustedCallersAttribute (APTCA), nebo transparentní metoda (z hlediska zabezpečení) splňuje pravidlo LinkDemand pro typ nebo metodu. |
|
CA2142: Transparentní kód nemůže být chráněn pomocí LinkDemands |
Toto pravidlo je vyvoláno na transparentních metodách, které vyžadují pro přístup k nim pravidla LinkDemand.Kód transparentní z hlediska 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: Transparentní metody nemohou používat požadavky zabezpečení |
Kód transparentní z hlediska 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í.Kód transparentní z hlediska zabezpečení by měl k učinění rozhodnutí o zabezpečení používat úplné požadavky a bezpečně kritický kód by neměl spoléhat na to, že transparentní kód tyto úplné požadavky provede. |
CA2144: Transparentní kód nesmí načítat sestavení z bajtových polí |
Přezkoumání zabezpečení transparentního kódu není tak důsledné 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ů, nemusí být v transparentním kódu zaznamenána a takové pole bajtů může obsahovat kritický nebo důležitější bezpečně kritický kód, který musí být auditován. |
CA2145: Transparentní metody nesmějí být doplněny pomocí SuppressUnmanagedCodeSecurityAttribute |
Metody označené atributem SuppressUnmanagedCodeSecurityAttribute mají implicitní pravidlo LinkDemand umístěné na jakoukoli metodu, která je volá.Tento LinkDemand vyžaduje, aby byl volající kód kritický z hlediska zabezpečení.Označení metody, která používá SuppressUnmanagedCodeSecurity, atributem SecurityCriticalAttribute zviditelňuje tento požadavek pro volající metody. |
CA2146: Typy nesmějí být kritické méně než jejich základní typy a rozhraní |
Toto pravidlo je vyvoláno, když má odvozený typ atribut transparentnosti zabezpečení, který není tak kritický jako jeho základní typ nebo implementované rozhraní.Pouze kritické typy lze odvodit z kritických základních typů nebo mohou implementovat kritická rozhraní a pouze kritické typy nebo bezpečně kritické typy mohou být odvozeny ze základních bezpečně kritických typů nebo mohou implementovat bezpečně kritická rozhraní. |
CA2147: Transparentní metody nemusejí podporovat použití nepodmíněných výrazů zabezpečení |
U kódu označeného atributem SecurityTransparentAttribute není uděleno dostatečné oprávnění k vyhodnocení. |
CA2149: Transparentní metody nesmějí provádět volání do nativního kódu |
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. |
CA2151: Pole s kritickými typy by měla být kritická pro zabezpečení |
Chcete-li používat typy kritické z hlediska zabezpečení, musí být kód, který odkazuje na typ, buď kritický z hlediska zabezpečení, nebo bezpečně kritický z hlediska zabezpečení.To platí i v případě, že je odkaz nepřímý.Proto je existence transparentního pole kritického z hlediska zabezpečení nebo transparentního pole bezpečně kritického z hlediska zabezpečení zavádějící, jelikož transparentní kód nebude mít k poli přístup. |
CA5122: Deklarace volání nespravovaného kódu nesmí být kritické pro zabezpečení |
Metody jsou při provádění operace citlivé na zabezpečení označeny jako SecuritySafeCritical, ale lze je také bezpečně použít transparentním kódem.Transparentní kód nesmí nikdy přímo volat nativní kód prostřednictvím P/Invoke.Proto označení P/Invoke jako bezpečně kritické z hlediska zabezpečení neumožní transparentnímu kódu vyvolat je a je zavádějící pro analýzu zabezpečení. |