Kódminőségi szabályok

A .NET-kódelemzés olyan szabályokat biztosít, amelyek célja a kódminőség javítása. A szabályok olyan területekre vannak rendszerezve, mint a tervezés, a globalizáció, a teljesítmény és a biztonság. Bizonyos szabályok a .NET API használatára vonatkoznak, míg mások az általános kódminőségre vonatkoznak.

Szabályok indexe

Az alábbi táblázat a kódminőség-elemzési szabályokat sorolja fel.

Szabályazonosító és figyelmeztetés Description
CA1000: Ne deklarálja a statikus tagokat általános típusok esetében Amikor egy általános típus statikus tagját meghívják, a típus argumentumát meg kell adni a típushoz. Ha olyan általános példánytagot hív meg, amely nem támogatja a következtetést, a típusargumentumot meg kell adni a tag számára. Ebben a két esetben a típusargumentum megadásának szintaxisa eltérő és könnyen összekeverhető.
CA1001: Az eldobható mezőket tartalmazó típusoknak eldobhatónak kell lenniük Az osztály deklarál és implementál egy System.IDisposable típusú példánymezőt, és az osztály nem implementálja az IDisposable-t. Az IDisposable mezőt közvetetten deklaráló osztály nem felügyelt erőforrással rendelkezik, és implementálnia kell az IDisposable interfészt.
CA1002: Ne tegye közzé az általános listákat A System.Collections.Generic.List<(Of <(T>)>) egy általános gyűjtemény, amely teljesítményre, nem öröklésre lett tervezve. Ezért a Lista nem tartalmaz virtuális tagokat. Az öröklésre tervezett általános gyűjteményeket inkább közzé kell tenni.
CA1003: Általános eseménykezelő példányok használata A típus tartalmaz egy olyan meghatalmazottat, aki érvénytelenséget ad vissza, amelynek aláírása két paramétert tartalmaz (az első egy objektumot, a második pedig az EventArgshez rendelhető típust), és az azt tartalmazó szerelvény a Microsoft .NET-keretrendszer 2.0-s verziót célozza.
CA1005: Az általános típusok túlzott paramétereinek elkerülése Minél több típusparamétert tartalmaz egy általános típus, annál nehezebb tudni és megjegyezni, hogy az egyes típusparaméterek mit jelölnek. Ez általában egyértelmű egy típusparaméter esetén, például a List<T> esetében, valamint egyes két típusparaméteres esetekben, például a Dictionary<TKey, TValue> esetében. Ha azonban kétnál több típusparaméter létezik, a nehézség túl nagy lesz a legtöbb felhasználó számára.
CA1008: Az enumoknak nullás értékkel kell rendelkezniük A nem inicializált enumerálás alapértelmezett értéke, csakúgy, mint a többi értéktípus, nulla. A nemflags attribútumú enumerálásnak nullával kell meghatároznia egy tagot, hogy az alapértelmezett érték az enumerálás érvényes értéke legyen. Ha a FlagsAttribute attribútummal rendelkező enumerálás nulla értékű tagot határoz meg, a neve "Nincs", amely azt jelzi, hogy nincs érték beállítva az enumerálásban.
CA1010: A gyűjteményeknek általános felületet kell implementálniuk A gyűjtemények használhatóságának bővítése érdekében implementálja az egyik általános gyűjteményi felületet. Ezután a gyűjtemény általános gyűjteménytípusok feltöltésére használható.
CA1012: Az absztrakt típusok nem lehetnek nyilvános konstruktorok Az absztrakt típusok konstruktorai csak származtatott típusok használatával hívhatók meg. Mivel a nyilvános konstruktorok egy típusú példányokat hoznak létre, és nem hozhatók létre absztrakt típusú példányok, a nyilvános konstruktort tartalmazó absztrakt típus helytelenül van kialakítva.
CA1014: Szerelvények megjelölése a CLSCompliantAttribute használatával A Common Language Specification (CLS) olyan elnevezési korlátozásokat, adattípusokat és szabályokat határoz meg, amelyeknek a szerelvényeknek meg kell felelniük, ha a programozási nyelvek között használják őket. A jó tervezés megköveteli, hogy minden assembly a CLSCompliantAttribute használatával kifejezetten jelezze a CLS-kompatibilitást. Ha ez az attribútum nem található meg egy szerelvényen, a szerelvény nem megfelelő.
CA1016: Szerelvények megjelölése AssemblyVersionAttribute használatával A .NET a verziószám használatával egyedileg azonosít egy szerelvényt, és az erősen elnevezett szerelvények típusaihoz kapcsolódik. A verziószám a verzió- és a közzétevői szabályzattal együtt használatos. Alapértelmezés szerint az alkalmazások csak azzal a szerelvényverzióval futnak, amellyel létrehozták őket.
CA1017: Szerelvények megjelölése a ComVisibleAttribute használatával A ComVisibleAttribute határozza meg, hogy a COM-ügyfelek hogyan férnek hozzá a felügyelt kódhoz. A helyes tervezés megköveteli, hogy az assemblyk egyértelműen megadják a COM-láthatóságot. A COM-láthatóság beállítható a teljes összeállításra, majd felülírható az egyes típusok és típustagok szintjén. Ha ez az attribútum nincs jelen, a szerelvény tartalma látható a COM-ügyfelek számára.
CA1018: Attribútumok megjelölése az AttributeUsageAttribute használatával Ha egyéni attribútumot határoz meg, jelölje meg az AttributeUsageAttribute használatával annak jelzésére, hogy a forráskódban hol alkalmazható az egyéni attribútum. Az attribútum jelentése és rendeltetése határozza meg az attribútum érvényes helyét a kódban.
CA1019: Attribútumargumentumok kiegészítőinek definiálása Az attribútumok olyan kötelező argumentumokat határozhatnak meg, amelyeket meg kell adni, amikor az attribútumot egy célra alkalmazza. Ezeket pozicionális argumentumoknak is nevezik, mivel pozicionális paraméterekként adják át őket az attribútumkonstruktoroknak. Minden kötelező argumentum esetében az attribútumnak rendelkeznie kell egy megfelelő, csak olvasható tulajdonsággal is, hogy az argumentum értéke futtatási időben lekérhető legyen. Az attribútumok opcionális argumentumokat is definiálhatnak, amelyeket nevesített argumentumoknak is neveznek. Ezeket az argumentumokat a rendszer név alapján adja meg az attribútumkonstruktoroknak, és ennek megfelelő olvasási/írási tulajdonságmal kell rendelkeznie.
CA1021: A paraméterek elkerülése A típusok hivatkozással történő átadása (out vagy ref) használatához tapasztalatra van szükség a mutatókkal, az értéktípusok és a referenciatípusok különbségeinek megértéséhez, valamint a több visszatérési értékkel rendelkező metódusok kezeléséhez. Emellett az out és a ref paraméter közötti különbség sem közismert.
CA1024: Adott esetben tulajdonságok használata A nyilvános vagy védett metódusok neve "Get" néven kezdődik, nem vesz fel paramétereket, és olyan értéket ad vissza, amely nem tömb. A módszer alkalmas lehet arra, hogy tulajdonsággá alakítsák.
CA1027: Számjelek megjelölése FlagsAttribute használatával Az enumerálás olyan értéktípus, amely a kapcsolódó elnevezett állandók készletét határozza meg. Alkalmazza a FlagsAttribute attribútumot egy enumerációra, ha a névvel ellátott konstansok értelmes módon kombinálhatók.
CA1028: Az enumerálási tárolónak Int32-nek kell lennie Az enumerálás olyan értéktípus, amely a kapcsolódó elnevezett állandók készletét határozza meg. Alapértelmezés szerint a System.Int32 adattípus az állandó érték tárolására szolgál. Bár módosíthatja ezt a mögöttes típust, a legtöbb forgatókönyv esetében nem kötelező vagy ajánlott.
CA1030: Szükség esetén események használata Ez a szabály olyan metódusokat észlel, amelyek általában eseményekhez használt neveket használnak. Ha egy metódust egyértelműen meghatározott állapotváltozásra válaszul hív meg, a metódust egy eseménykezelőnek kell meghívnia. A metódust meghívó objektumoknak eseményeket kell emelnie a metódus közvetlen meghívása helyett.
CA1031: Ne kezeljen általános kivételtípusokat Általános kivételeket nem szabad elkapni. Egy konkrétabb kivétel elfogása, vagy az általános kivétel újbóli létrehozása a fogási blokk utolsó utasításaként.
CA1032: Standard kivételkonstruktorok implementálása Ha nem adja meg a konstruktorok teljes készletét, az megnehezítheti a kivételek helyes kezelését.
CA1033: A felületi metódusokat gyermektípusok szerint kell meghívni A külsőleg nem látható típus explicit módon implementál egy nyilvános felületet, és nem nyújt alternatív külsőleg látható metódust, amelynek neve megegyezik.
CA1034: A beágyazott típusok nem lehetnek láthatók A beágyazott típus egy másik típus hatókörében deklarált típus. A beágyazott típusok hasznosnak bizonyulnak a benne található típus privát implementálási részleteinek beágyazásához. Az erre a célra használt beágyazott típusok nem lehetnek külsőleg láthatók.
CA1036: Hasonló típusok felülbírálási módszerei Egy nyilvános vagy védett típus implementálja a System.IComparable felületet. Nem bírálja felül az Object.Equals függvényt, és nem túlterheli a nyelvspecifikus operátort az egyenlőség, az egyenlőtlenség, a kisebb vagy nagyobb érték miatt.
CA1040: Az üres felületek elkerülése Az interfészek olyan tagokat határoznak meg, amelyek viselkedési vagy használati szerződést biztosítanak. Az interfész által leírt funkciók bármilyen típussal alkalmazhatók, függetlenül attól, hogy a típus hol jelenik meg az öröklési hierarchiában. Egy típus implementál egy interfészt úgy, hogy implementációkat biztosít a felület tagjai számára. Az üres felület nem határoz meg tagokat; ezért nem határoz meg végrehajtható szerződést.
CA1041: ElavultAttribute üzenet megadása Egy típus vagy tag egy System.ObsoleteAttribute attribútummal van megjelölve, amely nem rendelkezik megadva az ObsoleteAttribute.Message tulajdonsággal. Amikor egy ObsoleteAttribute attribútummal megjelölt típust vagy tagot lefordítanak, az attribútum Message tulajdonsága jelenik meg. Ez információt ad a felhasználónak az elavult típusról vagy tagról.
CA1043: Integrál vagy sztring argumentum használata indexelőkhöz Az indexelőknek (vagyis az indexelt tulajdonságoknak) integrál- vagy sztringtípusokat kell használniuk az indexhez. Ezeket a típusokat általában az adatstruktúrák indexelésére használják, és növelik a kódtár használhatóságát. Az objektumtípus használatát azokra az esetekre kell korlátozni, amikor az adott integrál- vagy sztringtípus nem határozható meg a tervezéskor.
CA1044: A tulajdonságok nem lehetnek csak írhatók Bár elfogadható, sőt gyakran szükséges csak olvasható tulajdonságot használni, a tervezési irányelvek tiltják a csak írható tulajdonságok használatát. Ennek az az oka, hogy ha egy felhasználó beállít egy értéket, majd megakadályozza, hogy a felhasználó megtekintse ezt az értéket, nem biztosít semmilyen biztonságot. Olvasási hozzáférés nélkül a megosztott objektumok állapota nem tekinthető meg, ami korlátozza a hasznosságukat.
CA1045: Ne adjon át típusokat referenciaként A típusok hivatkozással (out vagy ref) való átadásához tapasztalatra van szükség a mutatókkal, az értéktípusok és a referenciatípusok különbségeinek megértéséhez, valamint a több visszatérési értékkel rendelkező metódusok kezeléséhez. A széles közönség számára tervező könyvtárak tervezői ne számítsanak arra, hogy a felhasználók magabiztosan tudják használni a out és ref paramétereket.
CA1046: Ne terhelje túl az egyenlőségoperátort referenciatípusokon Referenciatípusok esetén az egyenlőségi operátor alapértelmezett megvalósítása szinte mindig helyes. Alapértelmezés szerint két hivatkozás csak akkor egyenlő, ha ugyanarra az objektumra mutatnak.
CA1047: Ne deklaráljon védett tagokat lezárt típusok esetén A típusok védett tagokat deklarálnak, hogy az öröklő típusok elérhessék vagy felülbírálhassák a tagot. Definíció szerint a lezárt típusok nem örökölhetők, ami azt jelenti, hogy a lezárt típusok védett módszerei nem hívhatók meg.
CA1050: Típusok deklarálása névterekben A típusok névterekben vannak deklarálva, hogy megelőzzék a névütközést, és így rendszerezhetők a kapcsolódó típusok egy objektumhierarchiában.
CA1051: Ne deklaráljon látható példánymezőket A mező elsődleges használatának implementálási részletként kell lennie. A mezőknek privátnak vagy belsőnek kell lenniük, és tulajdonságok használatával kell elérhetővé tenni őket.
CA1052: A statikus tartótípusokat le kell zárni A nyilvános vagy védett típus csak statikus tagokat tartalmaz, és a lezárt (C# referencia) (NotInheritable) módosítóval nem deklarálható. A nem örökölni kívánt típust a lezárt módosítóval kell megjelölni annak alaptípusként való használatának megakadályozása érdekében.
CA1053: A statikus tartótípusoknak nem szabad konstruktorokkal rendelkezniük A nyilvános vagy beágyazott nyilvános típus csak statikus tagokat deklarál, és nyilvános vagy védett alapértelmezett konstruktorsal rendelkezik. A konstruktor szükségtelen, mert a statikus tagok meghívása nem igényel ilyen típusú példányt. A karakterlánc típusú túlterhelésnek a karakterláncargumentum használatával kell meghívnia az URI-típusú túlterhelést a megbízhatóság és a biztonság érdekében.
CA1054: Az URI-paraméterek nem lehetnek sztringek Ha egy metódus egy URI sztring-ábrázolását használja, megfelelő túlterhelést kell biztosítani, amely az URI-osztály egy példányát veszi igénybe, amely biztonságos és biztonságos módon biztosítja ezeket a szolgáltatásokat.
CA1055: Az URI visszatérési értékei nem lehetnek sztringek Ez a szabály feltételezi, hogy a metódus URI-t ad vissza. Az URI sztring-ábrázolása hajlamos elemzési és kódolási hibákra, és biztonsági résekhez vezethet. A System.Uri osztály ezeket a szolgáltatásokat biztonságos és védett módon nyújtja.
CA1056: Az URI-típusú tulajdonságok nem lehetnek karakterláncok Ez a szabály feltételezi, hogy a tulajdonság egy egységes erőforrás-azonosítót (URI) jelöl. Az URI sztring-ábrázolása hajlamos elemzési és kódolási hibákra, és biztonsági résekhez vezethet. A System.Uri osztály ezeket a szolgáltatásokat biztonságos és védett módon nyújtja.
CA1058: A típusok nem terjeszthetik ki bizonyos alaptípusokat A külsőleg látható típus kiterjeszt bizonyos alaptípusokat. Használja az egyik alternatívát.
CA1060: P/Invokes áthelyezése NativeMethods osztályba Platformhívási metódusok, például a System.Runtime.InteropServices.DllImportAttribute attribútummal megjelölt metódusok, vagy a Visual Basicben a Declare kulcsszóval definiált metódusok nem felügyelt kódhoz férnek hozzá. Ezek a metódusok a NativeMethods, a SafeNativeMethods vagy a UnsafeNativeMethods osztályba tartoznak.
CA1061: Ne rejtse el az alaposztály-metódusokat Az alaptípusban lévő metódusokat egy azonos nevű metódus rejti el egy származtatott típusban, ha a származtatott módszer paraméteraditványa csak olyan típusok szerint különbözik, amelyek gyengébben származnak, mint az alapmetódus paraméter-aláírásában szereplő megfelelő típusok.
CA1062: Nyilvános metódusok argumentumainak ellenőrzése A külsőleg látható metódusoknak átadott összes hivatkozási argumentumot null értékre kell ellenőrizni.
CA1063: Az IDisposable helyes implementálása Minden IDisposable típusnak helyesen kell megvalósítania a Dispose-mintát.
CA1064: A kivételeknek nyilvánosnak kell lenniük A belső kivétel csak a saját belső hatókörén belül látható. Miután a kivétel kívül esik a belső hatókörön, csak az alapkivétel használható a kivétel elfogásához. Ha a belső kivétel a Exception, SystemException vagy ApplicationException osztályból származik, a külső kód nem fog elegendő információval rendelkezni ahhoz, hogy tudja, hogyan kezelje a kivételt.
CA1065: Ne emeljen kivételeket váratlan helyeken Az a metódus, amely várhatóan nem ad kivételeket, kivételt eredményez.
CA1066: IEquatable implementálása egyenlők felülírásakor Az értéktípus felülbírálja a metódust Equals , de nem implementálja IEquatable<T>.
CA1067: Az Equals felülbírálása az IEquatable megvalósításakor Egy típus implementálja IEquatable<T>, de nem bírálja felül Equals a metódust.
CA1068: A CancellationToken paramétereknek az utolsónak kell lenniük A metódus olyan CancellationToken paraméterrel rendelkezik, amely nem az utolsó paraméter.
CA1069: A számokat nem szabad duplikálni Az enumerálásnak több tagja van, amelyek explicit módon ugyanazt az állandó értéket kapják.
CA1070: Ne deklarálja az eseménymezőket virtuálisként Egy mezőszerű esemény virtuálisként lett deklarálva.
CA1200: Ne használjon cref-címkéket előtaggal Az XML-dokumentáció címkéjében szereplő cref attribútum "kódhivatkozást" jelent. Meghatározza, hogy a címke belső szövege kódelem, például típus, metódus vagy tulajdonság. Kerülje a címkék előtagokkal való használatát cref , mert megakadályozza, hogy a fordító ellenőrizze a hivatkozásokat. Emellett megakadályozza, hogy a Visual Studio integrált fejlesztési környezete (IDE) megtalálja és frissítse ezeket a szimbólumhivatkozásokat az újrabontások során.
CA1303: Ne adjon át literálokat honosított paraméterekként Egy külsőleg látható metódus paraméterként átad egy sztringkonstanst egy .NET-konstruktornak vagy metódusnak, és ennek a sztringnek honosíthatónak kell lennie.
CA1304: CultureInfo megadása A metódus vagy konstruktor olyan tagot hív meg, aki túlterheléssel rendelkezik, és elfogadja a System.Globalization.CultureInfo paramétert, és a metódus vagy konstruktor nem hívja meg a CultureInfo paramétert használó túlterhelést. Ha egy CultureInfo vagy System.IFormatProvider objektum nincs megadva, előfordulhat, hogy a túlterhelt tag által megadott alapértelmezett érték nem minden területi beállításban a kívánt hatást eredményezi.
CA1305: Az IFormatProvider megadása Egy metódus vagy konstruktor meghív egy vagy több olyan tagot, aki túlterheléssel rendelkezik, és elfogadja a System.IFormatProvider paramétert, és a metódus vagy konstruktor nem hívja meg az IFormatProvider paramétert használó túlterhelést. Ha egy System.Globalization.CultureInfo vagy IFormatProvider objektum nincs megadva, előfordulhat, hogy a túlterhelt tag által megadott alapértelmezett érték nem minden területi beállításban a kívánt hatást eredményezi.
CA1307: StringComparison megadása az egyértelműség érdekében Egy karakterlánc-összehasonlító művelet egy olyan metódustúlterhelést használ, amely nem állít be a StringComparison paramétert.
CA1308: Sztringek nagybetűs normalizálása A karakterláncokat csupa nagybetűssé kell normalizálni. A karakterek egy kis csoportja nem alakítható vissza veszteség nélkül, ha kisbetűssé alakítják.
CA1309: Az ordinal StringComparison használata A nemlinguisztikus karakterlánc-összehasonlító művelet nem állítja be a StringComparison paramétert ordinali vagy OrdinalIgnoreCase értékre. Ha a paramétert explicit módon StringComparison.Ordinal vagy StringComparison.OrdinalIgnoreCase értékre állítja, a kód gyakran gyorsul, helyesebbé válik, és megbízhatóbbá válik.
CA1310: A StringComparison megadása a helyesség biztosításához A karakterlánc-összehasonlítási művelet olyan metódus-túlterhelést használ, amely nem ad meg StringComparison paramétert, és alapértelmezés szerint kultúraspecifikus karakterlánc-összehasonlítást végez.
CA1311: Kulturális környezet megadása vagy invariáns verzió használata Adjon meg egy kultúrát, vagy használjon invariáns kultúrát, hogy elkerülje az aktuális kultúrától való implicit függőséget híváskor ToUpper vagy ToLower.
CA1401: A P/Invokes nem lehet látható Egy nyilvános típusban lévő nyilvános vagy védett metódus rendelkezik a System.Runtime.InteropServices.DllImportAttribute attribútummal (amelyet a Visual Basic Declare kulcsszava is megvalósít). Ezeket a módszereket nem szabad felfedni.
CA1416: Platformkompatibilitás ellenőrzése Ha platformfüggetlen API-kat használ egy összetevőn, a kód már nem működik az összes platformon.
CA1417: Ne használja a OutAttribute elemet karakterlánc-paramétereken P/Invoke-hívásokhoz Az OutAttribute érték szerint átadott sztringparaméterek destabilizálhatják a futtatókörnyezetet, ha a sztring internált.
CA1418: Érvényes platformkarakterlánc használata A platformkompatibilitás-elemző érvényes platformnevet és verziót igényel.
CA1419: Adjon meg egy olyan paraméter nélküli konstruktort, amely ugyanolyan látható, mint a betontípusok tartalmazó típusa, amely a következőből származik: System.Runtime.InteropServices.SafeHandle Egy olyan, paraméter nélküli konstruktor biztosítása, amely egy System.Runtime.InteropServices.SafeHandle elemből származó típus esetében ugyanolyan láthatóságú, mint a befoglaló típus, jobb teljesítményt és használhatóságot biztosít a forrásgenerált interopmegoldásokkal.
CA1420: A tulajdonság, típus vagy attribútum futásidejű rendezést igényel Ha olyan funkciókat használ, amelyek futásidejű rendezést igényelnek, amikor a futásidejű rendezés le van tiltva, futásidejű kivételekhez vezet.
CA1421: A metódus futásidejű rendezést használ a DisableRuntimeMarshallingAttribute alkalmazásakor Egy metódus futásidejű adatrendezést használ, de a futásidejű adatrendezés kifejezetten le van tiltva.
CA1422: Platformkompatibilitás ellenőrzése Nem ajánlott egy adott operációs rendszerben (verzióban) elavult API meghívása az adott operációs rendszerről (verzió) elérhető hívási helyről.
CA1501: A túlzott öröklés elkerülése Egy típus több mint négy szinttel mélyebb az öröklési hierarchiában. A mélyen beágyazott típushierarchiák nehezen követhetők, értelmezhetők és karbantarthatók.
CA1502: A túlzott összetettség elkerülése Ez a szabály a módszeren keresztül méri a lineárisan független útvonalak számát, amelyet a feltételes ágak száma és összetettsége határoz meg.
CA1505: A nem elérhetetlen kód elkerülése Egy típus vagy metódus alacsony karbantarthatósági index értékkel rendelkezik. Az alacsony karbantarthatósági index azt jelzi, hogy egy típust vagy módszert valószínűleg nehéz fenntartani, és jó választás lenne az újratervezéshez.
CA1506: Kerülje a túlzott osztálykapcsolódást Ez a szabály az osztálykapcsolódást a típus vagy metódus által tartalmazott egyedi típushivatkozások számának megszámlálásával méri.
CA1507: A string helyett használja a nameof kulcsszót Egy karakterlánc-literál argumentumként van használva ott, ahol egy nameof kifejezés is használható lenne.
CA1508: A halott feltételes kód kerülése Egy metódus feltételes kódot tartalmaz, amely futásidőben mindig true vagy false értékre értékelődik ki. Ez holt kódot eredményez a feltétel false ágában.
CA1509: Érvénytelen bejegyzés a kódmetrikák konfigurációs fájljában A kódmetrikaszabályok, például a CA1501, a CA1502, a CA1505 és a CA1506, egy érvénytelen bejegyzéssel rendelkező CodeMetricsConfig.txt konfigurációs fájlt adott meg.
CA1510: Az ArgumentNullException dobássegítő használata A throw helper metódusok egyszerűbbek és hatékonyabbak, mint az if új kivételpéldányt létrehozó blokkok.
CA1511: ArgumentException kivételdobás segítő A throw helper metódusok egyszerűbbek és hatékonyabbak, mint az if új kivételpéldányt létrehozó blokkok.
CA1512: Az ArgumentOutOfRangeException dobássegítő használata A throw helper metódusok egyszerűbbek és hatékonyabbak, mint az if új kivételpéldányt létrehozó blokkok.
CA1513: Az ObjectDisposedException dobási segéd használata A throw helper metódusok egyszerűbbek és hatékonyabbak, mint az if új kivételpéldányt létrehozó blokkok.
CA1514: Kerülje a redundáns hossz argumentumot Karakterlánc vagy puffer végéig történő szeleteléskor a hosszargumentum redundáns. A számított hossz hibalehetőséget jelenthet, és szükségtelen is.
CA1515: Fontolja meg a nyilvános típusok belsővé alakítását Az osztálytárakkal ellentétben az alkalmazás API-jára általában nem hivatkoznak nyilvánosan, így a típusok belsőleg is megjelölhetők.
CA1516: Platformfüggetlen intrinszikek használata Ez a szabály észleli a platformspecifikus belső tényezők használatát, amelyek ehelyett egyenértékű platformfüggetlen belsővel helyettesíthetők.
CA1700: Ne adja az enumerálási értékeknek a „Reserved” nevet Ez a szabály azt feltételezi, hogy a "reserved" nevet tartalmazó enumerálási tag jelenleg nem használatos, hanem egy helyőrző, amelyet egy későbbi verzióban át kell nevezni vagy el kell távolítani. Egy tag átnevezése vagy eltávolítása a kompatibilitást megtörő változás.
CA1707: Az azonosítók nem tartalmazhatnak aláhúzásjeleket Konvenció szerint az azonosítónevek nem tartalmazzák az aláhúzásjel (_) karaktert. Ez a szabály ellenőrzi a névtereket, a típusokat, a tagokat és a paramétereket.
CA1708: Az azonosítóknak a kis- és nagybetűkön túlmenően is különbözniük kell A névterek, típusok, tagok és paraméterek azonosítója nem térhet el csak esetenként, mert a közös nyelvi futtatókörnyezetet megcélzott nyelveknek nem kell megkülönböztetniük a kis- és nagybetűket.
CA1710: Az azonosítóknak helyes utótagokkal kell rendelkezniük Konvenció szerint az egyes alaptípusokat kiterjesztő vagy bizonyos interfészeket megvalósító, illetve az ezekből a típusokból származtatott típusok neve az alaptípushoz vagy interfészhez társított utótaggal rendelkezik.
CA1711: Az azonosítóknak nem szabad helytelen utótagot adni Konvenció szerint csak azoknak a típusoknak a neve, amelyek bizonyos alaptípusokat bővítenek ki, vagy amelyek bizonyos interfészeket implementálnak, vagy amelyek ezekből a típusokból származnak, meghatározott fenntartott utótagokkal végződnek. Más típusnevek nem használhatják ezeket a fenntartott utótagokat.
CA1712: Ne használja előtagként a típusnevet az enumerációs értékeknél Az enumerálási tagok neve nem előtagú a típusnév használatával, mert a fejlesztői eszközök várhatóan típusinformációkat adnak meg.
CA1713: Az események neve nem kezdődhet a „before” vagy „after” előtaggal Az esemény neve "Előtt" vagy "After" néven kezdődik. Az adott sorrendben kiváltott kapcsolódó események megnevezéséhez használjon jelen vagy múlt időt a műveletek sorozatában elfoglalt, egymáshoz viszonyított helyük jelzésére.
CA1714: A jelzőenumerációk neve többes számban legyen A nyilvános enumerálás a System.FlagsAttribute attribútummal rendelkezik, és a neve nem "s" végződésű. A FlagsAttribute használatával megjelölt típusok neve többes, mert az attribútum azt jelzi, hogy több érték is megadható.
CA1715: Az azonosítóknak megfelelő előtaggal kell rendelkezniük A külsőleg látható felület neve nem "I" nagybetűvel kezdődik. Egy külsőleg látható típus vagy metódus általános típusparaméterének neve nem "T" nagybetűvel kezdődik.
CA1716: Az azonosítók nem felelnek meg a kulcsszavaknak A névtér neve vagy típusneve megegyezik egy fenntartott kulcsszóval egy programozási nyelven. A névterek és a típusok azonosítói nem egyeznek a közös nyelvi futtatókörnyezetet megcélzott nyelvek által definiált kulcsszavakkal.
CA1717: Csak a FlagsAttribute enumerációknak lehet többes számú nevük Az elnevezési konvenciók azt diktálják, hogy az enumerálás többes számú neve azt jelzi, hogy az enumerálás több értéke is megadható egyszerre.
CA1720: Az azonosítók nem tartalmazhatnak típusneveket Egy külsőleg látható tag paraméterének neve tartalmaz egy adattípusnevet, vagy egy külsőleg látható tag neve egy nyelvspecifikus adattípusnevet tartalmaz.
CA1721: A tulajdonságnevek nem egyeznek a get metódusok között Egy nyilvános vagy védett tag neve a „Get” szóval kezdődik, és egyébként megegyezik egy nyilvános vagy védett property nevével. A „Get” metódusoknak és tulajdonságoknak olyan névvel kell rendelkezniük, amely egyértelműen jelzi a szerepüket.
CA1724: A típusnevek nem egyezhetnek meg a névterek neveivel A típusnevek nem egyeznek a .NET-névterek nevével. A szabály megsértése csökkentheti a kódtár használhatóságát.
CA1725: A paraméterek nevének meg kell egyeznie az alapdeklarációval A paraméterek egységes elnevezése a felülbírálási hierarchiában növeli a metódus felülbírálásainak használhatóságát. A származtatott metódus azon paraméterneve, amely eltér az alapdeklarációban szereplő névtől, zavart okozhat abban, hogy a metódus az alapmetódus felülbírálása vagy a metódus új túlterhelése.
CA1727: A PascalCase használata az elnevezett helyőrzők esetében A PascalCase használatával elnevezett helyőrzőket használhat a naplózási üzenetsablonban.
CA1801: A nem használt paraméterek áttekintése A metódus-aláírás olyan paramétert tartalmaz, amely nem szerepel a metódus törzsében.
CA1802: Szükség esetén literálok használata Egy mező statikus és csak olvashatóként van deklarálva (a Visual Basicben Shared és ReadOnly), és olyan értékkel van inicializálva, amely fordítási időben kiszámítható. Mivel a megcélzott mezőhöz rendelt érték fordításkor megbízható, módosítsa a deklarációt const (Const in Visual Basic) mezőre, hogy az érték fordítási időpontban legyen kiszámítva, és ne futásidőben.
CA1805: Ne inicializálja feleslegesen A .NET-futtatókörnyezet a konstruktor futtatása előtt inicializálja a referenciatípusok összes mezőjét az alapértelmezett értékükre. A legtöbb esetben egy mező explicit inicializálása az alapértelmezett értékre redundáns, ami növeli a karbantartási költségeket, és csökkentheti a teljesítményt (például nagyobb szerelvényméret esetén).
CA1806: Ne hagyja figyelmen kívül a metódus eredményeit A rendszer létrehoz egy új objektumot, de soha nem használja; vagy egy új sztringet létrehozó és visszaadó metódust hív meg a rendszer, és az új sztring soha nem lesz használva; vagy egy COM vagy P/Invoke metódus soha nem használt HRESULT vagy hibakódot ad vissza.
CA1810: A referenciatípusú statikus mezők közvetlen inicializálása Amikor egy típus explicit statikus konstruktort deklarál, a just-in-time (JIT) fordító egy ellenőrzést ad hozzá a típus minden egyes statikus metódusához és példánykonstruktorához, hogy meggyőződjön arról, hogy a statikus konstruktort korábban meghívták. A statikus konstruktor-ellenőrzések csökkenthetik a teljesítményt.
CA1812: A nem telepített belső osztályok elkerülése A szerelvényben lévő kód nem hozza létre egy szerelvényszintű típus példányát.
CA1813: A nem hozzárendelt attribútumok elkerülése A .NET metódusokat biztosít az egyéni attribútumok lekéréséhez. Ezek a metódusok alapértelmezés szerint az attribútumöröklési hierarchiában keresnek. Az attribútum zárolása megszünteti a keresést az öröklési hierarchián keresztül, és javíthatja a teljesítményt.
CA1814: A fogazott tömbök előnyben részesítése a többdimenziós tömbökkel szemben A szaggatott tömb olyan tömb, amelynek elemei tömbök. Az elemeket alkotó tömbök különböző méretűek lehetnek, ami egyes adathalmazok számára kevesebb felesleges helyet eredményez.
CA1815: Bírálja felül az Equals metódust és az egyenlőségoperátort az értéktípusokon Az értéktípusok esetében az Egyenlőség öröklött implementációja a Tükröződés kódtárat használja, és összehasonlítja az összes mező tartalmát. A tükröződés számításilag költséges, és az egyenlőség minden mezőjének összehasonlítása szükségtelen lehet. Ha arra számít, hogy a felhasználók összehasonlítják vagy rendezik a példányokat, vagy kivonattáblakulcsként használják a példányokat, az értéktípusnak egyenlőségeket kell implementálnia.
CA1816: A GC.SuppressFinalize helyes meghívása Egy olyan metódus, amely a Dispose implementációja, nem hívja meg a GC.SuppressFinalize metódust; vagy egy olyan metódus, amely nem a Dispose implementációja, meghívja a GC.SuppressFinalize metódust; vagy egy metódus meghívja a GC.SuppressFinalize metódust, és a this helyett valami mást ad át neki (a Visual Basic nyelvben: Me).
CA1819: A tulajdonság nem adhat vissza tömböket A tulajdonságok által visszaadott tömbök nem írásvédettek, még akkor sem, ha a tulajdonság csak olvasható. Annak érdekében, hogy a tömb védett legyen a módosításokkal szemben, a tulajdonságnak a tömb másolatát kell visszaadnia. A felhasználók általában nem fogják megérteni az ilyen tulajdonság meghívásának kedvezőtlen teljesítménybeli következményeit.
CA1820: Üres sztringek ellenőrzése a karakterlánc hossza alapján A sztringek összehasonlítása a String.Length tulajdonság vagy a String.IsNullOrEmpty metódus használatával jelentősen gyorsabb, mint az Egyenlők használata.
CA1821: Üres véglegesítők eltávolítása Amikor csak lehetséges, kerülje a véglegesítőket az objektum élettartamának nyomon követésével járó többletterhelés miatt. Az üres véglegesítő többletterhelést okoz, és nem jár előnyökkel.
CA1822: A tagfüggvényeket jelölje meg statikusként Azok a tagok, amelyek nem férnek hozzá a példányadatokhoz, és nem hívnak meg példánymetódusokat, statikusként jelölhetők meg (a Visual Basicben: Shared). Miután statikusként jelöli meg a metódusokat, a fordító nem virtuális hívási helyeket hoz létre ezekhez a tagokhoz. Ez mérhető teljesítménynövekedést biztosíthat a teljesítményérzékeny kódhoz.
CA1823: A nem használt privát mezők elkerülése A rendszer olyan privát mezőket észlelt, amelyekre láthatóan nem hivatkoznak az assemblyben.
CA1824: Szerelvények megjelölése a NeutralResourcesLanguageAttribute használatával A NeutralResourcesLanguage attribútum tájékoztatja az erőforrás-kezelőt arról a nyelvről, amely egy szerelvény semleges kultúrájának erőforrásainak megjelenítésére szolgál. Ez javítja az első betölthető erőforrás keresési teljesítményét, és csökkentheti a munkakészletet.
CA1825: A nulla hosszúságú tömbfoglalások elkerülése A nulla hosszúságú tömb inicializálása szükségtelen memóriafoglaláshoz vezet. Ehelyett a statikusan lefoglalt üres tömbpéldányt használja a(z) Array.Empty meghívásával. A memóriafoglalás a metódus összes meghívása között meg van osztva.
CA1826: Tulajdonság használata a Linq Enumerable metódus helyett Enumerable A LINQ metódust olyan típuson használták, amely egy egyenértékű, hatékonyabb tulajdonságot támogat.
CA1827: Ne használja a Count/LongCount függvényt, ha bármelyik használható Count vagy LongCount olyan módszert használtak, ahol Any a módszer hatékonyabb lenne.
CA1828: Ne használja a CountAsync/LongCountAsync parancsot, ha az AnyAsync használható CountAsync vagy LongCountAsync olyan módszert használtak, ahol AnyAsync a módszer hatékonyabb lenne.
CA1829: Az Enumerable.Count metódus helyett használja a Length/Count tulajdonságot Count A LINQ metódust egy egyenértékű, hatékonyabb Length vagy Count tulajdonságot támogató típuson használták.
CA1830: Előnyben részesítse az erősen gépelt Hozzáfűzés és Beszúrás metódus túlterhelését a StringBuilderen Append és Insert több típushoz is biztosít túlterheléseket a(z) String típuson kívül. Ha lehetséges, a ToString() és a sztringet használó túlterhelés helyett inkább a szigorúan típusos túlterheléseket részesítse előnyben.
CA1831: Ha szükséges, tartományalapú indexelők helyett AsSpan használata sztringekhez Ha egy karakterláncon tartományindexet használ, és az értéket implicit módon a ReadOnlySpan<char> típushoz rendeli, akkor a(z) Substring metódus lesz használatban a(z) Slice helyett, amely lemásolja a karakterlánc kért részét.
CA1832: Tartományalapú indexelők helyett AsSpan vagy AsMemory használata a tömb ReadOnlySpan vagy ReadOnlyMemory részének lekéréséhez Ha egy tömbön tartományindexelőt használ, és az értéket implicit módon egy ReadOnlySpan<T> vagy ReadOnlyMemory<T> típusnak rendeli hozzá, akkor a(z) GetSubArray metódus lesz használatban a(z) Slice helyett, amely a tömb kért részének másolatát hozza létre.
CA1833: Tartományalapú indexelők helyett AsSpan vagy AsMemory használata tömb span vagy memória részének lekéréséhez Ha egy tömbön tartományindexelőt használ, és az értéket implicit módon egy Span<T> vagy Memory<T> típusnak rendeli hozzá, akkor a(z) GetSubArray metódus lesz használatban a(z) Slice helyett, amely a tömb kért részének másolatát hozza létre.
CA1834: A StringBuilder.Append(char) használata egyetlen karakterből álló karakterláncok esetén A StringBuilder rendelkezik egy Append túlterhelt változattal, amely argumentumként egy char típust fogad. Teljesítménybeli okokból inkább a char túlterhelést hívja meg.
CA1835: Az Memory-alapú túlterhelések előnyben részesítése ReadAsync és WriteAsync Stream-nak van egy ReadAsync túlterhelése, amely Memory<Byte>-t vesz első argumentumként, és egy WriteAsync túlterhelése, amely ReadOnlyMemory<Byte>-t vesz első argumentumként. Inkább hívja meg a memóriaalapú túlterheléseket, amelyek hatékonyabbak.
CA1836: A(z) IsEmpty helyett részesítse előnyben a(z) Count elemet, ha elérhető Az objektum elemeket tartalmaz-e annak megállapításához részesítse előnyben a IsEmpty tulajdonságot, amely hatékonyabb, mint a Count, Length, Count<TSource>(IEnumerable<TSource>) vagy LongCount<TSource>(IEnumerable<TSource>).
CA1837: A(z) Environment.ProcessId használata Process.GetCurrentProcess().Id helyett Environment.ProcessId egyszerűbb és gyorsabb, mint Process.GetCurrentProcess().Ida .
CA1838: A P/Invokes paramétereinek elkerülése StringBuilder A StringBuilder kicsomagolása mindig létrehoz egy natív pufferkópiát, ami több allokációt eredményez egy kicsomagolási művelethez.
CA1839: Az Environment.ProcessPath használata a Process.GetCurrentProcess().MainModule.FileName helyett Environment.ProcessPath egyszerűbb és gyorsabb, mint Process.GetCurrentProcess().MainModule.FileNamea .
CA1840: Az Environment.CurrentManagedThreadId használata a Thread.CurrentThread.ManagedThreadId helyett Environment.CurrentManagedThreadId kompaktabb és hatékonyabb, mint Thread.CurrentThread.ManagedThreadIda .
CA1841: Részesítse előnyben a Dictionary Contains metódusait A(z) Contains vagy Keys gyűjteményen a(z) Values meghívása gyakran költségesebb lehet, mint a(z) ContainsKey vagy ContainsValue meghívása magán a szótáron.
CA1842: Ne használjon WhenAll egyetlen feladattal A(z) WhenAll egyetlen feladattal való használata teljesítménycsökkenést okozhat. Várjon vagy adja vissza a feladatot.
CA1843: Egyetlen tevékenységgel nem használható WaitAll A(z) WaitAll egyetlen feladattal való használata teljesítménycsökkenést okozhat. Várjon vagy adja vissza a feladatot.
CA1844: Az aszinkron metódusok memóriaalapú felülbírálásának biztosítása alosztályozáskor Stream A teljesítmény javítása érdekében felülbírálja a memóriaalapú aszinkron metódusokat az alosztályozás Streamsorán. Ezután implementálja a tömbalapú metódusokat a memóriaalapú metódusok tekintetében.
CA1845: Span-alapú megközelítést használj string.Concat Hatékonyabb a AsSpan és a string.Concat használata a(z) Substring és az összefűzési operátor helyett.
CA1846: Részesítse előnyben a(z) AsSpan elemet a(z) Substring helyett AsSpan hatékonyabb, mint Substringa . Substring O(n) karakterlánc-másolást végez, míg AsSpan nem, és költsége állandó. AsSpan sem végez halomfoglalást.
CA1847: Karakterkonstans használata egyetlen karakterkereséshez Egyetlen karakter keresésekor String.Contains(char) helyett használja a(z) String.Contains(string) elemet.
CA1848: Használja a LoggerMessage delegáltakat A jobb teljesítmény érdekében használja a LoggerMessage meghatalmazottakat.
CA1849: Aszinkron metódusok meghívása aszinkron metódusokban Egy már eleve aszinkron metódusban a többi metódust az aszinkron verziójukon keresztül kell meghívni, ha van ilyen.
CA1850: Részesítse előnyben a statikus HashData metódust a(z) ComputeHash helyett Hatékonyabb a statikus HashData metódus használata, mint egy HashAlgorithm példány létrehozása és kezelése a ComputeHash meghívásához.
CA1851: A gyűjtemény lehetséges több enumerálása IEnumerable A(z) IEnumerable kollekció lehetséges többszöri bejárása. Érdemes lehet olyan implementációt használni, amely elkerüli a több enumerálást.
CA1852: Belső típusok lezárása Az a típus, amely a szerelvénykészletén kívül nem érhető el, és a tartalmazó szerelvénykészleten belül nincsenek altípusai, nem lezárt.
CA1853: Szükségtelen hívás Dictionary.ContainsKey(key) Nem kell megvédeni a(z) Dictionary.Remove(key) elemet a(z) Dictionary.ContainsKey(key) elemmel. Dictionary<TKey,TValue>.Remove(TKey) már ellenőrzi, hogy a kulcs létezik-e, és nem dob kivételt, ha nem létezik.
CA1854: Előnyben részesítendő a(z) IDictionary.TryGetValue(TKey, out TValue) metódus Inkább használjon TryGetValue-t egy szótárindexelő hozzáférése helyett, amit egy típusellenőrzés ContainsKey véd. ContainsKey és az indexelő is megkeresi a kulcsot, így a használat TryGetValue elkerüli a további kereséseket.
CA1855: A Span<T>.Clear() használata a Span<T>.Fill() helyett A span elemeinek alapértelmezett értékkel való kitöltéséhez hatékonyabb a(z) Span<T>.Clear() hívása, mint a(z) Span<T>.Fill(T) hívása.
CA1856: A ConstantExpected attribútum helytelen használata Az ConstantExpectedAttribute attribútum nincs megfelelően alkalmazva egy paraméterre.
CA1857: A paraméter állandót vár az optimális teljesítményhez Érvénytelen argumentumot ad át a rendszer egy jegyzettel ellátott paraméternek ConstantExpectedAttribute.
CA1858: A StartsWith használata IndexOf helyett Egy karakterlánc adott előtaggal való kezdődésének ellenőrzésére hatékonyabb a String.StartsWith meghívása, mint a String.IndexOf meghívása.
CA1859: Ha lehetséges, használjon konkrét típusokat a jobb teljesítmény érdekében A kód felülettípusokat vagy absztrakt típusokat használ, ami szükségtelen felületi hívásokhoz vagy virtuális hívásokhoz vezet.
CA1860: Kerülje a bővítménymetódus használatát Enumerable.Any() A Length, Count vagy IsEmpty használata (ha lehetséges) hatékonyabb és egyértelműbb, mint a Enumerable.Any meghívása annak megállapítására, hogy egy gyűjteménytípusnak van-e bármilyen eleme.
CA1861: Az állandó tömbök argumentumként való elkerülése Az argumentumként átadott állandó tömbök nem lesznek újra felhasználhatók, ami teljesítményterhelést jelent. A teljesítmény javítása érdekében fontolja meg, hogy a mezőket static readonly mezőkké alakítja át.
CA1862: Használja a StringComparison metódus túlterheléseit kis- és nagybetűre nem érzékeny string-összehasonlításra Amikor a kód a(z) ToLower() vagy a(z) ToUpper() elemet hívja meg egy kis- és nagybetűket nem megkülönböztető sztring-összehasonlítás végrehajtásához, a rendszer szükségtelen foglalást végez.
CA1863: Használat CompositeFormat A formázási költség csökkentése érdekében gyorsítótárazzon, és használjon egy CompositeFormat-példányt a String.Format vagy StringBuilder.AppendFormat argumentumaként.
CA1864: A módszer előnyben részesítése IDictionary.TryAdd(TKey, TValue) A(z) Dictionary<TKey,TValue>.ContainsKey(TKey) és Dictionary<TKey,TValue>.Add is lekérdezést végez, ami redundáns. Hatékonyabb a(z) Dictionary<TKey,TValue>.TryAdd meghívása, amely egy bool értéket ad vissza, és jelzi, hogy az érték hozzá lett-e adva vagy sem. TryAdd nem írja felül a kulcs értékét, ha a kulcs már létezik.
CA1865-CA1867: Karakter túlterhelés használata A char túlterhelés jobb teljesítményt nyújt az egyetlen karakterből álló karakterláncok esetén.
CA1868: Felesleges hívás a Contains a halmazok esetében Mind a ISet<T>.Add(T), mind a ICollection<T>.Remove(T) keresést végez, ezért felesleges előtte meghívni a ICollection<T>.Contains(T) függvényt. Hatékonyabb közvetlenül a Add(T) vagy a Remove(T) hívása, amely logikai értéket ad vissza, jelezve, hogy az elem hozzá lett-e adva vagy el lett-e távolítva.
CA1869: A példányok gyorsítótárazása és újrafelhasználása JsonSerializerOptions A szerializáláshoz vagy deszerializáláshoz használt helyi példány JsonSerializerOptions jelentősen csökkentheti az alkalmazás teljesítményét, ha a kód többször fut, mivel a System.Text.Json belsőleg gyorsítótárazza a szerializációval kapcsolatos metaadatokat a megadott példányba.
CA1870: Gyorsítótárazott SearchValues példány használata A gyorsítótárazott SearchValues<T> példány használata hatékonyabb, mint az értékek közvetlen átadása IndexOfAny-nak vagy ContainsAny-nak.
CA1871: Ne adjon át null értékű szerkezetet a következőnek: ArgumentNullException.ThrowIfNull ArgumentNullException.ThrowIfNull elfogad egy object, így ha egy null értékű struktúrát adunk át, az az érték dobozolását okozhatja.
CA1872: Részesítse előnyben a Convert.ToHexString és Convert.ToHexStringLower használatát a BitConverter.ToString alapuló hívásláncokkal szemben A bájtok hexadecimális karakterlánccá alakításakor használja a(z) Convert.ToHexString vagy Convert.ToHexStringLower elemet. Ezek a módszerek hatékonyabbak, és a memóriakiosztás szempontjából is kedvezőbbek, mint a BitConverter.ToString és a String.Replace együttes használata a kötőjelek és a String.ToLower helyettesítésére.
CA1873: A potenciálisan költséges naplózás elkerülése Sok esetben a naplózás le van tiltva, vagy olyan naplószintre van beállítva, amely szükségtelen értékelést eredményez a naplózási argumentumok esetében.
CA1874: Használd Regex.IsMatch Regex.IsMatch egyszerűbb és gyorsabb, mint Regex.Match(...).Successa .
CA1875: Használja Regex.Count Regex.Count egyszerűbb és gyorsabb, mint Regex.Matches(...).Counta .
CA1877: "Path.Combine" vagy "Path.Join" túlterhelések használata Ha több Path.Combine vagy Path.Join művelet van egymásba ágyazva, akkor azok egyetlen műveletté vonhatók össze a teljesítmény és az olvashatóság javítása érdekében.
CA2000: Szabadítsa fel az objektumokat, mielőtt kikerülnek a hatókörből Mivel olyan kivételes esemény fordulhat elő, amely megakadályozza egy objektum véglegesítőjének futását, az objektumot explicit módon kell megsemmisíteni, mielőtt az összes rá mutató hivatkozás hatókörön kívül lenne.
CA2002: Ne zárolja a gyenge identitású objektumokat A rendszer azt állítja, hogy egy objektum gyenge identitással rendelkezik, ha közvetlenül elérhető az alkalmazás tartományhatárai között. A gyenge identitással rendelkező objektumok zárolását lekérni próbáló szálakat egy másik alkalmazástartomány második szála blokkolhatja, amely ugyanahhoz az objektumhoz van zárolva.
CA2007: Ne várjon közvetlenül egy Taskra Az aszinkron metódus közvetlenül várja a Task elemet. Ha egy aszinkron metódus közvetlenül vár egy Task adott műveletre, a folytatás ugyanabban a szálban történik, amely létrehozta a feladatot. Ez a viselkedés a teljesítmény szempontjából költséges lehet, és holtpontot eredményezhet a felhasználói felületen. Fontolja meg a(z) Task.ConfigureAwait(Boolean) hívását, hogy jelezze folytatási szándékát.
CA2008: Ne hozzon létre feladatokat TaskScheduler átadása nélkül A feladat létrehozására vagy folytatására szolgáló művelet olyan metódustúlterhelést használ, amely nem ad meg TaskScheduler paramétert.
CA2009: Ne hívja meg a ToImmutableCollection függvényt egy nem módosíthatóCollection értéken A(z) ToImmutable metódust szükségtelenül hívták meg egy, a(z) System.Collections.Immutable névtérből származó nem módosítható gyűjteményen.
CA2011: Ne rendeljen hozzá tulajdonságot a setteren belül Egy tulajdonsághoz véletlenül értéket rendeltek a saját set hozzáférőjén belül.
CA2012: ValueTasks helyes használata A tagkihívásokból visszaadott ValueTask-elemeket közvetlenül várjuk. A ValueTask többszöri felhasználása, illetve az eredményének közvetlen lekérése, mielőtt ismert lenne, hogy befejeződött, kivételhez vagy adatsérüléshez vezethet. Az ilyen ValueTask figyelmen kívül hagyása valószínűleg egy funkcionális hiba jele, és ronthatja a teljesítményt.
CA2013: Ne használja a ReferenceEqualst értéktípusokkal Amikor az értékeket System.Object.ReferenceEquals használatával hasonlítják össze, ha az objA és az objB értéktípusok, akkor a(z) ReferenceEquals metódusnak való átadásuk előtt be lesznek csomagolva. Ez azt jelenti, hogy még ha az objA és az objB is ugyanazt az értéktípus-példányt képviseli, a ReferenceEquals metódus ennek ellenére hamis értéket ad vissza.
CA2014: Ne használjon stackallocot hurkokban. A stackalloc által lefoglalt veremterület csak az aktuális metódus meghívásának végén szabadul fel. Ciklusban használva korlátlan veremnövekedést eredményezhet, ami végül veremtúlcsorduláshoz vezethet.
CA2015: Ne definiáljon véglegesítőket a MemoryManager<T-ből származtatott típusokhoz> Ha véglegesítőt ad hozzá egy olyan típushoz, amelyből MemoryManager<T> származik, akkor a memória felszabadítható, miközben még használatban van egy Span<T>.
CA2016: A CancellationToken paramétert adja tovább az azt fogadó metódusoknak Továbbítsa a CancellationToken paramétert azoknak a metódusoknak, amelyek fogadnak ilyet, hogy a művelet megszakításáról szóló értesítések megfelelően propagálódjanak, vagy adja át explicit módon a CancellationToken.None értéket annak jelzésére, hogy a tokent szándékosan nem propagálja.
CA2017: A paraméterek száma nem egyezik A naplózási üzenetsablonban megadott paraméterek száma nem egyezik meg az elnevezett helyőrzők számával.
CA2018: A count másolandó Buffer.BlockCopy bájtok számát meghatározó argumentum A(z) Buffer.BlockCopy használatakor a(z) count argumentum a másolandó bájtok számát adja meg. Csak olyan Array.Length tömbök argumentumához használhatócount, amelyek elemei pontosan egy bájt méretűek. byte, sbyteés bool a tömbök egy bájt méretű elemeket tartalmaznak.
CA2019: ThreadStatic a mezők nem használhatnak beágyazott inicializálást A ThreadStaticAttribute-val jelölt mező inicializálása helyben vagy explicit módon egy static konstruktorban történik (Shared a Visual Basicben).
CA2020: Az IntPtr/UIntPtr beépített operátorai által okozott viselkedésváltozás megakadályozása A .NET 7-ben hozzáadott egyes beépített operátorok eltérően viselkednek, mint a felhasználó által definiált operátorok a .NET 6-ban és a korábbi verziókban. Egyes operátorok, amelyek korábban nem ellenőrzött környezetben túlcsordulás esetén kivételt váltottak ki, többé nem váltanak ki kivételt, hacsak nincsenek ellenőrzött környezetbe foglalva. Egyes operátorok, amelyek korábban nem dobtak be ellenőrzött környezetet, most csak akkor dobnak, ha nem ellenőrzött környezetbe vannak csomagolva.
CA2021: Ne hívja meg az Enumerable.Cast<T> vagy az Enumerable.OfType<T> metódust inkompatibilis típusokkal A(z) Enumerable.Cast<TResult>(IEnumerable) vagy Enumerable.OfType<TResult>(IEnumerable) hívás olyan típusparamétert ad meg, amely nem kompatibilis a bemeneti gyűjtemény típusával.
CA2022: Kerülje a pontatlan olvasást a Stream.Read használatakor Előfordulhat, hogy egy Stream.Read hívás kevesebb bájtot ad vissza a kértnél, ami megbízhatatlan kódot eredményez, ha a visszatérési érték nincs bejelölve.
CA2023: Érvénytelen zárójelek az üzenetsablonban Az üzenetsablonban található zárójelek érvénytelenek. Győződjön meg arról, hogy az üzenetsablonban lévő kapcsos zárójelek érvényes nyitó és zárójelek, vagy megfelelően vannak escape-elve.
CA2024: Ne használja a StreamReader.EndOfStreamet aszinkron metódusokban A StreamReader.EndOfStream tulajdonság nem szándékos szinkron blokkolást okozhat, ha nincs pufferelt adat. Ehelyett használja közvetlenül a StreamReader.ReadLineAsync(), amely a stream végének elérésekor null ad vissza.
CA2025: Ne adjon át példányokat nem várt feladatokba IDisposable A IDisposable példányokat használó nem várt feladatok ezeket a példányokat már jóval felhasználásuk után is használhatják. Győződjön meg arról, hogy az ilyen példányokat használó tevékenységek a példányok megsemmisítése előtt befejeződnek.
CA2026: A JsonElement.Parse előnyben részesítése a JsonDocument.Parse() helyett. RootElement Hatékonyabb közvetlenül hívni JsonElement.Parse , mint hívni JsonDocument.Parse().RootElement.
CA2100: Sql-lekérdezések áttekintése biztonsági rések esetén Egy metódus a System.Data.IDbCommand.CommandText tulajdonságot egy sztringargumentumból a metódusba épített sztring használatával állítja be. Ez a szabály feltételezi, hogy a sztring argumentum felhasználói bemenetet tartalmaz. A felhasználói bemenetből létrehozott SQL-parancssztring sebezhető az SQL-injektálási támadásokkal szemben.
CA2101: P/Invoke sztringargumentumok rendezési beállításának megadása Egy P/Invoke-tag lehetővé teszi részlegesen megbízható hívók számára a használatát, karakterlánc-paramétere van, és nem marshalja explicit módon a karakterláncot. Ez biztonsági rést okozhat.
CA2109: Látható eseménykezelők áttekintése A rendszer nyilvános vagy védett eseménykezelési módszert észlelt. Az eseménykezelési módszereket csak akkor szabad felfedni, ha feltétlenül szükséges.
CA2119: Privát felületeknek megfelelő tömítési módszerek Egy örökölhető nyilvános típus egy belső (a Visual Basicben: Friend) interfészmetódus felülírható implementációját biztosítja. A szabály megsértésének kijavításához megakadályozza, hogy a metódus felül legyen bírálva a szerelvényen kívül.
CA2153: Ne kezeljen sérült állapotú kivételeket A sérült állapotkivételek (CSE-k) azt jelzik, hogy a folyamat memóriasérülést jelez. Ha ezeket elkapják ahelyett, hogy hagynák összeomlani a folyamatot, az biztonsági sebezhetőségekhez vezethet, ha egy támadó exploitot tud elhelyezni a sérült memóriaterületen belül.
CA2200: Újrafedés a verem részleteinek megőrzése érdekében A kivételt újradobják, és a kivétel kifejezetten meg van adva a throw utasításban. Ha a kivételt a dobási utasításban megadott kivétel megadásával ismét meg kell ismételni, a metódushívások listája elveszik a kivételt eldobó eredeti metódus és az aktuális metódus között.
CA2201: Ne dobjon fenntartott kivételtípusokat Ez megnehezíti az eredeti hiba észlelését és hibakeresését.
CA2207: Értéktípus statikus mezőinek inicializálása beágyazottan Egy értéktípus explicit statikus konstruktort deklarál. A szabály megsértésének kijavításához inicializálja az összes statikus adatot a deklaráláskor, és távolítsa el a statikus konstruktort.
CA2208: Az argumentumkivétel helyes inicializálása Meghívás történik egy olyan kivételtípus alapértelmezett (paraméter nélküli) konstruktorára, amely ArgumentException, vagy abból származik, illetve helytelen karakterlánc-argumentum kerül átadásra egy olyan kivételtípus paraméterezett konstruktorának, amely ArgumentException, vagy abból származik.
CA2211: A nem állandó mezők nem lehetnek láthatók Azok a statikus mezők, amelyek nem konstansok és nem csak olvashatók, nem szálbiztosak. Az ilyen mezőkhöz való hozzáférést gondosan szabályozni kell, és speciális programozási technikákat igényel az osztályobjektumhoz való hozzáférés szinkronizálásához.
CA2213: Eldobható mezőket kell megsemmisíteni A System.IDisposable-t megvalósító típus deklarálja az IDisposable-t is megvalósító típusú mezőket. A mező Dispose metódusát nem a deklaráló típus Dispose metódusa hívja meg.
CA2214: A konstruktorokban ne hívja meg a felülírható metódusokat Amikor egy konstruktor virtuális metódust hív meg, előfordulhat, hogy a metódust meghívó példány konstruktora még nem futott le.
CA2215: A Dispose metódusoknak meg kell hívniuk az alaposztály Dispose metódusát Ha egy típus egy Dispose-t megvalósító típusból öröklődik, a saját Dispose metódusából meg kell hívnia az alaptípus Dispose metódusát.
CA2216: Az eldobható típusoknak véglegesítőt kell deklarálniuk A System.IDisposable-t implementáló és a nem felügyelt erőforrások használatára utaló mezőket tartalmazó típus nem implementál véglegesítőt az Object.Finalize által leírtak szerint.
CA2217: Ne jelölje meg a számokat a FlagsAttribute használatával A külsőleg látható enumerálás a FlagsAttribute használatával van megjelölve, és egy vagy több olyan értékkel rendelkezik, amely nem két vagy a többi definiált érték kombinációja az enumerálásban.
CA2218: A GetHashCode felülírása az Equals felülbírálásakor Egy nyilvános típus felülbírálja a(z) System.Object.Equals elemet, de a(z) System.Object.GetHashCode elemet nem bírálja felül.
CA2219: Ne emelj kivételeket a kivételkikötésekben Ha a rendszer kivételt hoz létre egy végső vagy tartalék záradékban, az új kivétel elrejti az aktív kivételt. Ha egy szűrőfeltételben kivétel keletkezik, a futtatókörnyezet csendben elkapja a kivételt. Ez megnehezíti az eredeti hiba észlelését és hibakeresését.
CA2224: A(z) egyenlőségoperátor túlterhelésekor bírálja felül az Equals metódust A nyilvános típus megvalósítja az egyenlőségi operátort, de nem írja felül a(z) System.Object.Equals elemet.
CA2225: Az operátorok túlterhelései alternatívokat neveztek el Operátor-túlterhelés lett észlelve, és a várt elnevezett alternatív metódus nem található. A nevesített alternatív tag ugyanazokat a funkciókat biztosítja, mint az operátor, és olyan fejlesztők számára érhető el, akik olyan nyelveken programozzanak, amelyek nem támogatják a túlterhelt operátorokat.
CA2226: Az operátoroknak szimmetrikus túlterhelésekkel kell rendelkezniük Egy típus megvalósítja az egyenlőségi vagy egyenlőtlenségi operátort, és nem valósítja meg az ellenkező operátort.
CA2227: A gyűjtemény tulajdonságainak csak olvashatónak kell lenniük A írható gyűjteménytulajdonságokkal a felhasználó lecserélheti a gyűjteményt egy másik gyűjteményre. Egy írásvédett tulajdonság megakadályozza a gyűjtemény cseréjét, de továbbra is lehetővé teszi az egyes tagok beállítását.
CA2229: Szerializálási konstruktorok implementálása A szabály megsértésének kijavításához implementálja a szerializálási konstruktort. Lezárt osztály esetén a konstruktort tegye priváttá; ellenkező esetben tegye védetté.
CA2231: Az egyenlőségoperátor túlterhelése a ValueType.Equals felülírásakor Az értéktípus felülbírálja az Object.Equals értéket, de nem implementálja az egyenlőség operátort.
CA2234: System.Uri-objektumok átadása sztringek helyett Egy olyan metódus kerül meghívásra, amelynek van egy sztringparamétere, és a paraméter neve tartalmazza az „uri”, „URI”, „urn”, „URN”, „url” vagy „URL” elemek valamelyikét. A metódust deklaráló típus tartalmaz egy megfelelő, System.Uri paraméterrel rendelkező metódustúlterhelést.
CA2235: Az összes nem szerializálható mező megjelölése A nem szerializálható típusú példánymezők szerializálható típusban deklarálhatók.
CA2237: ISerializable-típusok megjelölése a SerializableAttribute használatával Ahhoz, hogy a közös nyelvi futtatókörnyezet szerializálhatóként felismerje, a típusokat a SerializableAttribute attribútummal kell megjelölni akkor is, ha a típus egyéni szerializálási rutint használ az ISerializable felület implementálásával.
CA2241: Helyes argumentumok megadása a formázási módszerekhez A System.String.Format fájlnak átadott formátumargumentum nem tartalmaz olyan formázási elemet, amely megfelel az egyes objektumargumentumoknak, vagy fordítva.
CA2242: A NaN helyes tesztelése Ez a kifejezés egy értéket a Single.NaN vagy a Double.NaN értékkel vet össze. Az érték teszteléséhez használja a Single.IsNan(Single) vagy a Double.IsNan(Double) függvényt.
CA2243: Az attribútum-karakterláncliteráloknak helyesen elemezhetőnek kell lenniük Az attribútum sztringkonstans paramétere nem elemzi megfelelően az URL-címet, a GUID-t vagy a verziót.
CA2244: Ne duplikálja az indexelt elemek inicializálását Az objektuminicializáló több indexelt eleminicializálóval rendelkezik, ugyanazzal az állandó indexel. Az utolsó inicializáló kivételével mindegyik redundáns.
CA2245: Ne rendeljen hozzá tulajdonságot önmagához Egy tulajdonság véletlenül hozzá lett rendelve önmagához.
CA2246: Ne rendeljen hozzá szimbólumot és tagját ugyanabban az utasításban Nem ajánlott egy szimbólumot és annak tagját, azaz egy mezőt vagy tulajdonságot hozzárendelni ugyanabban az utasításban. Nem egyértelmű, hogy ebben az utasításban a taghozzáférés a szimbólum hozzárendelés előtti régi értékének, vagy a hozzárendelésből származó új értékének a használatára szolgált-e.
CA2247: A TaskCompletionSource konstruktornak átadott argumentumnak TaskCreationOptions enumnak kell lennie a TaskContinuationOptions enum helyett. A TaskCompletionSource rendelkezik olyan konstruktorokkal, amelyek a mögöttes Taskot vezérlő TaskCreationOptions értéket vesznek át, valamint olyan konstruktorokkal is, amelyek a Taskban tárolt objektumállapotot vesznek át. Ha a TaskCreationOptions helyett véletlenül egy TaskContinuationOptions parancsot ad át, a hívás állapotként kezeli a beállításokat.
CA2248: Adja meg a helyes enum argumentumot az Enum.HasFlag függvénynek A metódushívás argumentumaként HasFlag átadott számtípus eltér a hívó szám típusától.
CA2249: Fontolja meg a String.Contains használatát a String.IndexOf helyett Azok a string.IndexOf hívások, amelyek eredményét egy részsztring jelenlétének vagy hiányának ellenőrzésére használják, lecserélhetők erre: string.Contains.
CA2250: Használja a(z) ThrowIfCancellationRequested ThrowIfCancellationRequested automatikusan ellenőrzi, hogy a token megszakításra került-e, és ha igen, OperationCanceledException kivételt dob.
CA2251: A String.Equals használata a String.Compare helyett A String.Equals eredményének nullához hasonlítása helyett a String.Compare használata egyértelműbb, és valószínűleg gyorsabb is.
CA2252: Az előzetes verziójú funkciók használata Az előzetes verziójú API-k használata előtt jelentkezzen be a funkciók előzetes verziójára.
CA2253: A névvel ellátott helyőrzők nem lehetnek numerikus értékek A naplózási üzenetsablonban az elnevezett helyőrzők nem állhatnak kizárólag számjegyekből.
CA2254: A sablonnak statikus kifejezésnek kell lennie A naplózási üzenet sablonja nem változhat a hívások között.
CA2255: Az ModuleInitializer attribútum nem használható kódtárakban A modulinicializálókat az alkalmazáskód arra használja, hogy az alkalmazás összetevői inicializálva legyenek az alkalmazáskód végrehajtása előtt.
CA2256: A szülőfelületeken deklarált összes tagnak implementációval kell rendelkeznie egy DynamicInterfaceCastableImplementation attribútumú felületen A(z) DynamicInterfaceCastableImplementationAttribute attribútummal ellátott típusok interfészmegvalósításként szolgálnak egy olyan típus számára, amely megvalósítja a(z) IDynamicInterfaceCastable típust. Ennek eredményeképpen biztosítania kell az örökölt felületeken meghatározott összes tag implementálását, mivel a megvalósító IDynamicInterfaceCastable típus másként nem biztosítja őket.
CA2257: A felületen DynamicInterfaceCastableImplementationAttribute meghatározott tagoknak static kell lenniük. Mivel előfordulhat, hogy egy IDynamicInterfaceCastable-t implementáló típus nem valósít meg dinamikus felületet a metaadatokban, olyan példányfelület-tag esetében, amely nem lett explicit módon implementálva azon a típuson, a hívások futásidőben valószínűleg sikertelenek lesznek. Új felülettagok static megjelölése a futtatókörnyezeti hibák elkerülése érdekében.
CA2258: A DynamicInterfaceCastableImplementation felület biztosítása Visual Basicben nem támogatott Funkcionális DynamicInterfaceCastableImplementationAttribute-attribútumú felület biztosításához az Alapértelmezett felülettagok funkció szükséges, amely a Visual Basicben nem támogatott.
CA2259: Győződjön meg arról, hogy ThreadStatic csak statikus mezőkkel van használatban ThreadStaticAttribute csak a static mezőket érinti (a Visual Basicben: Shared). A példánymezőkre alkalmazva az attribútum nem befolyásolja a viselkedést.
CA2260: Általános matematikai felületek helyes implementálása Az általános matematikai interfészek megkövetelik, hogy maga a származtatott típus legyen használva az ön-ismétlődő típusparaméterhez.
CA2261: Ne használja együtt a(z) ConfigureAwaitOptions.SuppressThrowing és a(z) Task<TResult> elemet. A ConfigureAwaitOptions.SuppressThrowing beállítást az általános Task<TResult>nem támogatja, mivel ez érvénytelen TResulteredményhez vezethet.
CA2262: Megfelelő beállítás MaxResponseHeadersLength Győződjön meg arról, hogy az MaxResponseHeadersLength érték helyesen van megadva. Ez az érték kilobájtban van megadva.
CA2263: Részesítse előnyben a generikus túlterhelést, ha a típus ismert A generikus túlterhelés használata előnyösebb, mint egy System.Type argumentum átadása, ha a típus ismert, mert tisztább és típusbiztosabb kódot eredményez, valamint jobb fordítási idejű ellenőrzéseket tesz lehetővé.
CA2264: Ne adjon át nem null értékű értéket a következőnek: ArgumentNullException.ThrowIfNull ArgumentNullException.ThrowIfNull dob, ha az átadott argumentum null. Bizonyos szerkezetek, például a nem null értékű szerkezetek és nameof()new kifejezések ismertek, hogy soha nem null értékűek, ezért ArgumentNullException.ThrowIfNull soha nem dob.
CA2265: Ne hasonlítsa össze Span<T> a nulldefault Egy span összehasonlítása a null vagy a default elemmel lehet, hogy nem azt eredményezi, amit szándékozott. default és a null literál implicit módon Span<T>.Empty-ra konvertálódnak.
CA2266: A fájlalapú program belépési pontnak a következővel kell kezdődnie: #! Ha egy fájlalapú program több fájlból áll, a belépési pont fájljának egy shebang (#!) vonallal kell kezdődnie, hogy egyértelműen megkülönböztetje azt a többi fájltól.
CA2300: Ne használjon nem biztonságos deszerializáló binárisformattert A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2301: Ne hívja meg a BinaryFormatter.Deserialize parancsot a BinaryFormatter.Binder első beállítása nélkül A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2302: Győződjön meg arról, hogy a BinaryFormatter.Binder be van állítva a BinaryFormatter.Deserialize hívása előtt A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2305: Ne használja a nem biztonságos LosFormatter deszerializálót A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2310: Ne használjon nem biztonságos deszerializáló NetDataContractSerializert A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2311: Ne deszerializáljon a NetDataContractSerializer.Binder előzetes beállítása nélkül A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2312: Győződjön meg arról, hogy a NetDataContractSerializer.Binder be van állítva a deszerializálás előtt A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2315: Ne használjon nem biztonságos deszerializáló ObjectStateFormattert A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2321: Ne végezzen deszerializálást a JavaScriptSerializer és a SimpleTypeResolver használatával A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2322: Győződjön meg arról, hogy a JavaScriptSerializer nincs inicializálva a SimpleTypeResolverrel a deszerializálás előtt A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2326: Ne használjon TypeNameHandling értékeket a None értéken kívül A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2327: Ne használjon nem biztonságos JsonSerializerSettings-t A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2328: Győződjön meg arról, hogy a JsonSerializerSettings biztonságos A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2329: Ne deszerializálja a JsonSerializert nem biztonságos konfiguráció használatával A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2330: Győződjön meg arról, hogy a JsonSerializer biztonságos konfigurációval rendelkezik a deszerializáláskor A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2350: Győződjön meg arról, hogy a DataTable.ReadXml() bemenete megbízható Egy DataTable nem megbízható bemenetből történő deszerializálásakor a támadó rosszindulatú bemenetet hozhat létre, amellyel szolgáltatásmegtagadásos támadást hajthat végre. Előfordulhat, hogy ismeretlen távoli kódvégrehajtási biztonsági rések vannak.
CA2351: Győződjön meg arról, hogy a DataSet.ReadXml() bemenete megbízható Egy DataSet nem megbízható bemenetből történő deszerializálásakor a támadó rosszindulatú bemenetet hozhat létre, amellyel szolgáltatásmegtagadásos támadást hajthat végre. Előfordulhat, hogy ismeretlen távoli kódvégrehajtási biztonsági rések vannak.
CA2352: A nem biztonságos adathalmaz vagy a szerializálható típusú DataTable sebezhető lehet a távoli kódvégrehajtási támadásokkal szemben A megjelölt SerializableAttribute osztály vagy struktúra egy vagy több DataSet mezőt vagy DataTable tulajdonságot tartalmaz, és nem rendelkezik GeneratedCodeAttribute.
CA2353: Nem biztonságos dataSet vagy DataTable szerializálható típusban Az XML-szerializálási attribútummal vagy adatszerződési attribútummal megjelölt osztály vagy szerkezet tartalmaz egy vagy DataSet több DataTable mezőt vagy tulajdonságot.
CA2354: A deszerializált objektumgráfban található nem biztonságos DataSet vagy DataTable sebezhető lehet távoli kódfuttatási támadással szemben A System.Runtime.Serialization.IFormatter használatával végzett deszerializálás során a kasztolt típus objektumgráfja tartalmazhat DataSet vagy DataTable elemet.
CA2355: Nem biztonságos adathalmaz vagy DataTable deszerializált objektumgráfban Deszerializálás, ha a leadott vagy a megadott típus objektumgráfja tartalmazhat egy DataSet vagy DataTable.
CA2356: Nem biztonságos adathalmaz vagy adattábla a webes deszerializált objektumdiagramon Az a metódus, amely System.Web.Services.WebMethodAttribute vagy System.ServiceModel.OperationContractAttribute paraméterrel rendelkezik, olyan paraméterrel rendelkezik, amely hivatkozhat egy DataSet vagy DataTable elemre.
CA2361: Győződjön meg arról, hogy a DataSet.ReadXml() tulajdonságot tartalmazó automatikusan létrehozott osztály nem használható nem megbízható adatokkal Egy DataSet nem megbízható bemenetből történő deszerializálásakor a támadó rosszindulatú bemenetet hozhat létre, amellyel szolgáltatásmegtagadásos támadást hajthat végre. Előfordulhat, hogy ismeretlen távoli kódvégrehajtási biztonsági rések vannak.
CA2362: A nem biztonságos adathalmaz vagy az automatikusan szerializálható típusú DataTable sebezhető lehet a távoli kódvégrehajtási támadásokkal szemben Ha nem megbízható forrásból származó bemenetet deszerializál BinaryFormatter használatával, és a deszerializált objektumgráf tartalmaz egy DataSet vagy DataTable elemet, a támadó olyan rosszindulatú adatterhelést hozhat létre, amellyel távoli kódfuttatást hajthat végre.
CA3001: Az SQL-injektálási biztonsági rések kódjának áttekintése Ha nem megbízható bemeneti és SQL-parancsokkal dolgozik, ügyeljen az SQL-injektálási támadásokra. Az SQL-injektálási támadások rosszindulatú SQL-parancsokat hajthatnak végre, veszélyeztetve az alkalmazás biztonságát és integritását.
CA3002: Az XSS biztonsági réseinek kódjának áttekintése A webes kérések nem megbízható bemeneteivel való munka során ügyeljen a helyek közötti szkriptelési (XSS-) támadásokra. Az XSS-támadások nem megbízható bemenetet injektálnak a nyers HTML-kimenetbe, így a támadó rosszindulatú szkripteket hajthat végre vagy rosszindulatúan módosíthatja a tartalmat a weblapon.
CA3003: Fájlútvonal-injektálási biztonsági rések kódjának áttekintése A webes kérésekből származó nem megbízható bemenetek használatakor ügyeljen arra, hogy a fájlok elérési útjainak megadásakor felhasználó által vezérelt bemenetet használjon.
CA3004: Az információfeltárás biztonsági réseinek kódjának áttekintése A kivételinformációk közzététele betekintést nyújt a támadóknak az alkalmazás belső elemeibe, ami segíthet a támadóknak a biztonsági rések kihasználásában.
CA3005: LDAP-injektálási biztonsági rések kódjának áttekintése Ha nem megbízható bemenettel dolgozik, vegye figyelembe az Lightweight Directory Access Protocol (LDAP) injektálási támadásait. A támadók rosszindulatú LDAP-utasításokat futtathatnak az információs könyvtárakon. Különösen sebezhetők azok az alkalmazások, amelyek felhasználói bemenetet használnak dinamikus LDAP-utasítások létrehozásához a címtárszolgáltatások eléréséhez.
CA3006: A folyamatparancs-injektálási biztonsági rések kódjának áttekintése Ha nem megbízható bemenettel dolgozik, ügyeljen a parancsinjektálási támadásokra. A parancsinjektálási támadások rosszindulatú parancsokat hajthatnak végre a mögöttes operációs rendszeren, ami veszélyezteti a kiszolgáló biztonságát és integritását.
CA3007: Nyílt átirányítási biztonsági rések kódjának áttekintése Ha nem megbízható bemenettel dolgozik, ügyeljen a nyílt átirányítási biztonsági résekre. A támadók kihasználhatják a nyílt átirányítási biztonsági rést, hogy a webhelyet használva valódi URL-címet jelentessenek meg, de a gyanútlan látogatót adathalász vagy más rosszindulatú weblapra irányíthatják át.
CA3008: XPath-injektálási biztonsági rések kódjának áttekintése Ha nem megbízható bemenettel dolgozik, ügyeljen az XPath-injektálási támadásokra. Az XPath-lekérdezések nem megbízható bemenettel történő létrehozása lehetővé teheti, hogy a támadó rosszindulatúan manipulálja a lekérdezést, hogy nem kívánt eredményt adjon vissza, és esetleg közzétehesse a lekérdezett XML tartalmát.
CA3009: Az XML-injektálási biztonsági rések kódjának áttekintése Ha nem megbízható bemenettel dolgozik, ügyeljen az XML-injektálási támadásokra.
CA3010: XAML-injektálási biztonsági rések kódjának áttekintése Ha nem megbízható bemenettel dolgozik, ügyeljen az XAML-injektálási támadásokra. Az XAML egy olyan korrektúranyelv, amely közvetlenül az objektumok példányosítását és végrehajtását jelöli. Ez azt jelenti, hogy az XAML-ben létrehozott elemek képesek együttműködni a rendszererőforrásokkal (például a hálózati hozzáféréssel és a fájlrendszer IO-jával).
CA3011: A DLL-injektálási biztonsági rések kódjának áttekintése Ha nem megbízható bemenettel dolgozik, ügyeljen a nem megbízható kód betöltésére. Ha a webalkalmazás nem megbízható kódot tölt be, a támadók rosszindulatú DLL-eket szúrhatnak be a folyamatba, és rosszindulatú kódot futtathatnak.
CA3012: Regex-injektálási biztonsági rések kódjának áttekintése Ha nem megbízható bemenettel dolgozik, ügyeljen a regex injektálási támadásokra. A támadó regex-injektálással rosszindulatúan módosíthatja a regex-kifejezést, nem várt eredményeket érhet el, vagy hogy a regex túlzott processzorhasználatot használjon, ami szolgáltatásmegtagadási támadást eredményez.
CA3061: Ne adjon hozzá sémát URL-cím alapján Ne használja az Add metódus nem biztonságos túlterhelését, mert veszélyes külső hivatkozásokat okozhat.
CA3075: Nem biztonságos DTD-feldolgozás Ha nem biztonságos DTDProcessing-példányokat használ, vagy külső entitásforrásokra hivatkozik, az elemző elfogadhatja a nem megbízható bemeneteket, és bizalmas információkat közölhet a támadókkal.
CA3076: Nem biztonságos XSLT-szkript végrehajtása Ha nem biztonságosan hajtja végre az Extensible Stylesheet Language Transformations (XSLT) szolgáltatást a .NET-alkalmazásokban, a processzor feloldhatja a nem megbízható URI-hivatkozásokat, amelyek bizalmas információkat tehetnek közzé a támadók számára, ami szolgáltatásmegtagadáshoz és helyek közötti támadásokhoz vezethet.
CA3077: Nem biztonságos feldolgozás az API-tervezésben, az XML-dokumentum és az XML-szövegolvasóban Ha XMLDocumentből és XMLTextReaderből származó API-t tervez, ügyeljen a DtdProcessingre. A nem biztonságos DTDProcessing-példányok használata külső entitásforrásokra való hivatkozáskor vagy feloldásakor, illetve az XML-ben nem biztonságos értékek beállításakor információ felfedéséhez vezethet.
CA3147: Jelölje meg a HTTP-metóduskezelőket a ValidateAntiForgeryToken attribútummal Az ASP.NET, MVC-vezérlő tervezésekor vegye figyelembe a webhelyek közötti kérelmek hamisítására irányuló támadásokat. Egy webhelyek közötti kérelmek hamisítására irányuló támadás rosszindulatú kérelmet küldhet egy hitelesített felhasználó nevében az ASP.NET, MVC-vezérlőjének.
CA5350: Ne használjon gyenge titkosítási algoritmusokat A gyenge titkosítási algoritmusokat és kivonatolási függvényeket ma számos okból használják, de nem használhatók a védett adatok bizalmasságának vagy integritásának garantálására. Ez a szabály akkor aktiválódik, ha tripleDES, SHA1 vagy RIPEMD160 algoritmusokat talál a kódban.
CA5351: Ne használjon hibás titkosítási algoritmusokat A hibás titkosítási algoritmusok nem tekinthetők biztonságosnak, és használatukat erősen el kell kerülni. Ez a szabály akkor aktiválódik, ha megkeresi az MD5 kivonatoló algoritmust, vagy a DES vagy RC2 titkosítási algoritmusokat a kódban.
CA5358: Ne használjon nem biztonságos titkosítási módokat Ne használjon nem biztonságos titkosítási módokat
CA5359: Ne tiltsa le a tanúsítványérvényesítést A tanúsítvány segíthet a kiszolgáló identitásának hitelesítésében. Az ügyfeleknek ellenőriznie kell a kiszolgálótanúsítványt, hogy a kérések a kívánt kiszolgálóra érkezhessenek. Ha a ServerCertificateValidationCallback mindig visszaadja true, minden tanúsítvány megfelel az ellenőrzésnek.
CA5360: Ne hívjon meg veszélyes metódusokat deszerializálás során A nem biztonságos deszerializálás olyan biztonsági rés, amely akkor fordul elő, ha nem megbízható adatokat használnak egy alkalmazás logikájának visszaélésére, szolgáltatásmegtagadási (DoS-) támadás végrehajtására, vagy akár tetszőleges kód végrehajtására a deszerializáláskor. Gyakran előfordulhat, hogy rosszindulatú felhasználók visszaélnek ezekkel a deszerializálási funkciókkal, ha az alkalmazás az irányításuk alá tartozó nem megbízható adatokat deszerializálja. Konkrétan hívjon meg veszélyes metódusokat a deszerializálás során. A sikeres nem biztonságos deszerializálási támadások lehetővé tehetik, hogy a támadók olyan támadásokat hajtsanak végre, mint a DoS-támadások, a hitelesítési megkerülések és a távoli kódfuttatás.
CA5361: Ne tiltsa le a Schannel erős titkosításának használatát A(z) Switch.System.Net.DontEnableSchUseStrongCryptotrue értékre állítása gyengíti a kimenő Transport Layer Security-(TLS-)kapcsolatokban használt titkosítást. A gyengébb titkosítás veszélyeztetheti az alkalmazás és a kiszolgáló közötti kommunikáció bizalmasságát, így a támadók könnyebben lehallgathatják a bizalmas adatokat.
CA5362: Lehetséges referenciaciklus deszerializált objektumgráfban Ha nem megbízható adatokat deszerializál, akkor a deszerializált objektumgráfot feldolgozó kódnak végtelen ciklusok nélkül kell kezelnie a referenciaciklusokat. Ez magában foglalja mind a deszerializálási visszahívás részét képező kódot, mind az objektumgráfot a deszerializálás befejezése után feldolgozó kódot. Ellenkező esetben a támadó szolgáltatásmegtagadásos támadást hajthat végre hivatkozási ciklust tartalmazó rosszindulatú adatokkal.
CA5363: Ne tiltsa le a kérések érvényesítését A kérelmek érvényesítése a ASP.NET egyik funkciója, amely megvizsgálja a HTTP-kéréseket, és meghatározza, hogy tartalmaznak-e potenciálisan veszélyes tartalmakat, amelyek injektálási támadásokhoz vezethetnek, beleértve a helyek közötti szkriptelést is.
CA5364: Ne használjon elavult biztonsági protokollokat A Transport Layer Security (TLS) biztosítja a számítógépek közötti kommunikációt, leggyakrabban a Hypertext Transfer Protocol Secure (HTTPS) használatával. A TLS régebbi protokollverziói kevésbé biztonságosak, mint a TLS 1.2 és a TLS 1.3, és nagyobb valószínűséggel vannak új biztonsági rések. A kockázat csökkentése érdekében kerülje a régebbi protokollverziókat.
CA5365: Ne tiltsa le a HTTP-fejlécek ellenőrzését A HTTP-fejlécek ellenőrzése lehetővé teszi a válaszfejlécekben található kocsivissza- és újsorkarakterek, a \r és \n kódolását. Ez a kódolás segíthet elkerülni az olyan injektálási támadásokat, amelyek olyan alkalmazásokat használnak ki, amelyek a fejlécben található nem megbízható adatokat tükrözik.
CA5366: Az XmlReader használata a DataSet XML-beolvasásához A nem megbízható adatokat tartalmazó XML beolvasása DataSet használatával veszélyes külső hivatkozások betöltését eredményezheti, amit egy biztonságos feloldóval rendelkező XmlReader használatával vagy a DTD-feldolgozás letiltásával kell korlátozni.
CA5367: Ne szerializáljon mutatómezőket tartalmazó típusokat Ez a szabály ellenőrzi, hogy van-e szerializálható osztály mutatómezővel vagy tulajdonsággal. A szerializálni nem tudó tagok lehetnek mutatók, például statikus tagok vagy a velük NonSerializedAttributemegjelölt mezők.
CA5368: ViewStateUserKey beállítása lapról származtatott osztályokhoz ViewStateUserKey A tulajdonság beállítása segíthet megelőzni az alkalmazással kapcsolatos támadásokat, ha lehetővé teszi, hogy azonosítót rendeljen az egyes felhasználók nézetállapot-változójához, hogy a támadók ne tudják használni a változót támadás létrehozásához. Ellenkező esetben biztonsági rések lépnek fel a helyek közötti kérelemhamisításhoz.
CA5369: Az XmlReader használata deszerializáláshoz A nem megbízható DTD- és XML-sémák feldolgozása lehetővé teheti a veszélyes külső hivatkozások betöltését, amelyeket korlátozni kell egy Biztonságos feloldóval rendelkező XmlReaderrel, vagy a DTD és az XML beágyazott sémafeldolgozásának letiltásával.
CA5370: Az XmlReader használata az olvasó ellenőrzéséhez A nem megbízható DTD- és XML-sémák feldolgozása veszélyes külső hivatkozások betöltését teheti lehetővé. Ezt a veszélyes betöltést egy biztonságos feloldóval rendelkező XmlReaderrel, vagy a DTD és az XML beágyazott sémafeldolgozás letiltásával korlátozhatja.
CA5371: Az XmlReader használata sémaolvasáshoz A nem megbízható DTD- és XML-sémák feldolgozása veszélyes külső hivatkozások betöltését teheti lehetővé. Ezt korlátozza, ha egy XmlReader biztonságos feloldóval vagy letiltott DTD- és XML-beágyazott sémafeldolgozással rendelkezik.
CA5372: Az XmlReader használata XPathDocumenthez Az XML nem megbízható adatokból való feldolgozása veszélyes külső hivatkozásokat is betölthet, amelyek korlátozhatók egy biztonságos feloldóval rendelkező XmlReaderrel vagy a DTD-feldolgozás letiltásával.
CA5373: Ne használjon elavult kulcs származtatási függvényt Ez a szabály észleli a gyenge kulcsszármaztatási módszerek, a System.Security.Cryptography.PasswordDeriveBytes és Rfc2898DeriveBytes.CryptDeriveKey meghívását. System.Security.Cryptography.PasswordDeriveBytes a PBKDF1 gyenge algoritmust használt.
CA5374: Ne használja az XslTransformot Ez a szabály ellenőrzi, hogy System.Xml.Xsl.XslTransform példányosítva van-e a kódban. System.Xml.Xsl.XslTransform elavult, és nem szabad használni.
CA5375: Ne használjon megosztott hozzáférésű fiók aláírását A fiók sasa delegálhatja az olvasási, írási és törlési műveleteket a blobtárolókon, táblákon, üzenetsorokon és fájlmegosztásokon, amelyek nem engedélyezettek a szolgáltatás SAS-jével. Ez azonban nem támogatja a tárolószintű szabályzatokat, és kevesebb rugalmasságot és ellenőrzést biztosít a megadott engedélyek felett. Ha a rosszindulatú felhasználók megkapják, a tárfiók könnyen megsérül.
CA5376: A SharedAccessProtocol beállítása csak HTTPS-re Az SAS olyan bizalmas adatok, amelyek nem szállíthatók egyszerű szövegben HTTP-n.
CA5377: Tárolószintű hozzáférési szabályzat használata A tárolószintű hozzáférési szabályzat bármikor módosítható vagy visszavonható. Nagyobb rugalmasságot és ellenőrzést biztosít a megadott engedélyek felett.
CA5378: Ne tiltsa le a ServicePointManagerSecurityProtocols elemet A(z) Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocolstrue értékre állítása a Windows Communication Framework (WCF) Transport Layer Security (TLS) kapcsolatait a TLS 1.0 használatára korlátozza. A TLS e verziója elavult lesz.
CA5379: Ne használjon gyenge kulcs származtatási függvény-algoritmust Az Rfc2898DeriveBytes osztály alapértelmezés szerint az SHA1 algoritmust használja. Meg kell adnia a használandó kivonatolóalgoritmust a konstruktor egyes, SHA256 vagy újabb verziójú túlterheléseinél. Vegye figyelembe, hogy a(z) HashAlgorithm tulajdonság csak get hozzáférővel rendelkezik, és nem rendelkezik overridden módosítóval.
CA5380: Ne adjon hozzá tanúsítványokat a legfelső szintű tárolóhoz Ez a szabály észleli azokat a kódot, amelyek tanúsítványt adnak hozzá a megbízható legfelső szintű hitelesítésszolgáltatók tanúsítványtárolójába. Alapértelmezés szerint a megbízható legfelső szintű hitelesítésszolgáltatók tanúsítványtárolója olyan nyilvános hitelesítésszolgáltatókkal van konfigurálva, amelyek megfelelnek a Microsoft főtanúsítvány-program követelményeinek.
CA5381: Győződjön meg arról, hogy a tanúsítványok nincsenek hozzáadva a gyökértárolóhoz Ez a szabály észleli azokat a kódot, amelyek tanúsítványt adhatnak hozzá a megbízható legfelső szintű hitelesítésszolgáltatók tanúsítványtárolójába. Alapértelmezés szerint a megbízható legfelső szintű hitelesítésszolgáltatók tanúsítványtárolója olyan nyilvános hitelesítésszolgáltatókkal van konfigurálva, amelyek megfelelnek a Microsoft főtanúsítvány-program követelményeinek.
CA5382: Biztonságos cookie-k használata a ASP.NET Core-ban A HTTPS-en keresztül elérhető alkalmazásoknak biztonságos cookie-kat kell használniuk, amelyek azt jelzik a böngészőnek, hogy a cookie-t csak a Secure Sockets Layer (SSL) használatával kell továbbítani.
CA5383: Győződjön meg arról, hogy biztonságos cookie-kat használ a ASP.NET Core-ban A HTTPS-en keresztül elérhető alkalmazásoknak biztonságos cookie-kat kell használniuk, amelyek azt jelzik a böngészőnek, hogy a cookie-t csak a Secure Sockets Layer (SSL) használatával kell továbbítani.
CA5384: Ne használjon digitális aláírási algoritmust (DSA) A DSA egy gyenge aszimmetrikus titkosítási algoritmus.
CA5385: A Rivest–Shamir–Adleman (RSA) algoritmus használata megfelelő kulcsmérettel A 2048 bitesnél kisebb RSA-kulcs sebezhetőbb a találgatásos támadásokkal szemben.
CA5386: Kerülje a SecurityProtocolType értékének fix kódolását A Transport Layer Security (TLS) biztosítja a számítógépek közötti kommunikációt, leggyakrabban a Hypertext Transfer Protocol Secure (HTTPS) használatával. A TLS 1.0 és a TLS 1.1 protokollverzió elavult, míg a TLS 1.2 és a TLS 1.3 aktuális. A jövőben előfordulhat, hogy a TLS 1.2 és a TLS 1.3 elavult. Annak érdekében, hogy az alkalmazás biztonságos maradjon, kerülje a protokollverzió keménykódolását, és legalább .NET-keretrendszer 4.7.1-es verziót célozz meg.
CA5387: Ne használjon gyenge kulcs származtatási függvényt elégtelen iterációszámmal Ez a szabály ellenőrzi, hogy a titkosítási kulcsot 100 000-nél kisebb iterációs számmal hozták-e létre Rfc2898DeriveBytes . A magasabb iterációs szám segíthet enyhíteni a létrehozott titkosítási kulcsot kitaláló szótári támadásokat.
CA5388: Gondoskodjon a megfelelő iterációszámról gyenge kulcs származtatási függvény használatakor Ez a szabály ellenőrzi, hogy a titkosítási kulcsot 100 000-nél kisebb iterációs számmal hozták-e létre Rfc2898DeriveBytes . A magasabb iterációs szám segíthet enyhíteni a létrehozott titkosítási kulcsot kitaláló szótári támadásokat.
CA5389: Ne adja hozzá az archív elem elérési útját a cél fájlrendszer elérési útjához A fájl elérési útja lehet relatív, és ez a várt célútvonalon kívüli fájlrendszer-hozzáféréshez vezethet, ami rosszindulatú konfigurációmódosításokat és távoli kódfuttatást tehet lehetővé kivárásos technikával.
CA5390: Ne használj kemény kódú titkosítási kulcsot Ahhoz, hogy egy szimmetrikus algoritmus sikeres legyen, a titkos kulcsot csak a feladónak és a fogadónak kell ismernie. Ha egy kulcs nehezen kódolt, könnyen felderíthető. Még a lefordított bináris fájlokból is könnyen kinyerhetik azt a kártékony felhasználók. A titkos kulcs feltörése után a titkosító szöveg közvetlenül visszafejthető, és többé nem védett.
CA5391: Hamisítás elleni tokenek használata az ASP.NET Core MVC vezérlőiben A(z) POST, PUT, PATCH vagy DELETE kérés kezelése hamisítás elleni jogkivonat érvényesítése nélkül sebezhető lehet a webhelyek közötti kérelmek hamisítását célzó támadásokkal szemben. Egy webhelyközi kérelemhamisítási támadás rosszindulatú kéréseket küldhet egy hitelesített felhasználó nevében az ASP.NET Core MVC-vezérlőjének.
CA5392: A DefaultDllImportSearchPaths attribútum használata P/Invoke-hívásokhoz Alapértelmezés szerint a(z) DllImportAttribute használó P/Invoke függvények a betöltendő függvénytár keresésekor több könyvtárat is ellenőriznek, beleértve az aktuális munkakönyvtárat is. Ez biztonsági probléma lehet bizonyos alkalmazások esetében, ami DLL-eltérítéshez vezethet.
CA5393: Ne használjon nem biztonságos DllImportSearchPath értéket Előfordulhat, hogy rosszindulatú DLL található az alapértelmezett DLL-keresési könyvtárakban és az összeállítási könyvtárakban. Vagy attól függően, hogy honnan futtatja az alkalmazást, az alkalmazás címtárában rosszindulatú DLL is lehet.
CA5394: Ne használjon nem biztonságos véletlenszerűséget A kriptográfiailag gyenge pszeudo-véletlenszerű számgenerátor használatával a támadó előre jelezheti, hogy milyen biztonsági szempontból érzékeny érték jön létre.
CA5395: Hiányzó HttpVerb attribútum az akciómetódusoknál Az adatokat létrehozó, szerkesztendő, törölhető vagy egyéb módon módosító összes műveletmetelyt az antiforgery attribútummal kell védeni a helyek közötti kérelemhamisítási támadásoktól. A GET művelet végrehajtásának olyan biztonságos műveletnek kell lennie, amelynek nincsenek mellékhatásai, és nem módosítja a tárolt adatokat.
CA5396: Az HttpOnly értékének true értékre állítása a HttpCookie esetében Mélységi védelmi intézkedésként győződjön meg arról, hogy a biztonsági szempontból érzékeny HTTP-cookie-k HttpOnlyként vannak megjelölve. Ez azt jelzi, hogy a webböngészőknek le kell tiltania a szkriptek hozzáférését a cookie-khoz. Az injektált rosszindulatú szkriptek gyakran ellopják a cookie-kat.
CA5397: Ne használjon elavult SslProtocols-értékeket A Transport Layer Security (TLS) biztosítja a számítógépek közötti kommunikációt, leggyakrabban a Hypertext Transfer Protocol Secure (HTTPS) használatával. A TLS régebbi protokollverziói kevésbé biztonságosak, mint a TLS 1.2 és a TLS 1.3, és nagyobb valószínűséggel vannak új biztonsági rések. A kockázat csökkentése érdekében kerülje a régebbi protokollverziókat.
CA5398: Az SslProtocols-értékek fix megadásának elkerülése A Transport Layer Security (TLS) biztosítja a számítógépek közötti kommunikációt, leggyakrabban a Hypertext Transfer Protocol Secure (HTTPS) használatával. A TLS 1.0 és a TLS 1.1 protokollverzió elavult, míg a TLS 1.2 és a TLS 1.3 aktuális. A jövőben előfordulhat, hogy a TLS 1.2 és a TLS 1.3 elavult. Annak érdekében, hogy az alkalmazás biztonságos maradjon, kerülje a protokollverziók keménykódolását.
CA5399: Határozottan tiltsa le a HttpClient-tanúsítványok visszavonási listájának ellenőrzését A visszavont tanúsítványok már nem megbízhatók. Ezt használhatják a támadók, akik rosszindulatú adatokat adnak át, vagy ellopják a bizalmas adatokat a HTTPS-kommunikációban.
CA5400: Győződjön meg arról, hogy a HttpClient-tanúsítványok visszavonási listájának ellenőrzése nincs letiltva A visszavont tanúsítványok már nem megbízhatók. Ezt használhatják a támadók, akik rosszindulatú adatokat adnak át, vagy ellopják a bizalmas adatokat a HTTPS-kommunikációban.
CA5401: Ne használja a CreateEncryptort nem alapértelmezett IV-es verzióval A szimmetrikus titkosításnak mindig nem ismételhető inicializálási vektort kell használnia a szótártámadások megelőzése érdekében.
CA5402: A CreateEncryptor használata az alapértelmezett IV-vel A szimmetrikus titkosításnak mindig nem ismételhető inicializálási vektort kell használnia a szótártámadások megelőzése érdekében.
CA5403: Ne használj kemény kódú tanúsítványt Egy data vagy rawData konstruktor X509Certificate vagy X509Certificate2 paramétere fixen be van kódolva.
CA5404: Ne tiltsa le a jogkivonat-érvényesítési ellenőrzéseket TokenValidationParameters a tokenérvényesítést vezérlő tulajdonságok nem állíthatók erre: false.
CA5405: Ne hagyja mindig ki a tokenérvényesítést a delegáltakban A(z) AudienceValidator vagy LifetimeValidator elemhez rendelt callback mindig true-t ad vissza.
IL3000: Kerülje az Assembly-fájl elérési útjának használatát egy fájlként történő közzétételkor Egyfájlos közzétételkor kerülje az assembly fájlelérési útjának elérését.
IL3001: A szerelvényfájl elérési útjának elkerülése egyetlen fájlként való közzétételkor Egyfájlos közzétételkor kerülje az assembly fájlelérési útjának elérését.
IL3002: Ne hívja meg az annotációval ellátott tagokat RequiresAssemblyFilesAttribute, amikor egyetlen fájlban közzéteszi. Egyetlen fájlként való közzétételkor kerülje az RequiresAssemblyFilesAttribute jelöléssel ellátott tagok meghívását.
IL3003: RequiresAssemblyFilesAttribute az annotációknak meg kell egyezniük az összes interfész implementációban vagy felülírásban. RequiresAssemblyFilesAttribute az annotációknak meg kell egyezniük minden interfész implementáció vagy felülbírálás esetén.
IL3005: RequiresAssemblyFilesAttribute nem helyezhető közvetlenül az alkalmazás belépési pontjára. RequiresAssemblyFilesAttribute nem helyezhető közvetlenül az alkalmazás belépési pontjára.

Legend

Az alábbi táblázat a referenciadokumentációban szereplő egyes szabályokhoz megadott információk típusát mutatja be.

Item Description
Típus A szabály TypeName tulajdonsága.
Szabályazonosító A szabály egyedi azonosítója. A szabályazonosító és a kategória a figyelmeztetés forráson belüli letiltására szolgál.
Category A szabály kategóriája, például a biztonság.
A javítás kompatibilitástörő vagy nem törik Hogy a szabály megsértésének kijavítása kompatibilitástörő változás-e. A kompatibilitástörő változás azt jelenti, hogy a szabálysértést okozó céltól függőséggel rendelkező szerelvény nem fog újrafordítást végrehajtani az új rögzített verzióval, vagy futásidőben meghiúsulhat a módosítás miatt. Ha több javítás is elérhető, és legalább egy javítás kompatibilitástörő változás, és egy javítás nem, akkor a "Törés" és a "Nem törés" is meg van adva.
Cause Az adott felügyelt kód, amely miatt a szabály figyelmeztetést generál.
Description Ismerteti a figyelmeztetés mögötti problémákat.
Szabálysértések kijavítása Ebből a cikkből megtudhatja, hogyan módosíthatja a forráskódot úgy, hogy megfeleljen a szabálynak, és hogyan akadályozhatja meg, hogy figyelmeztetést generáljon.
Mikor kell letiltani a figyelmeztetéseket? Azt ismerteti, hogy mikor lehet biztonságosan letiltani a szabály figyelmeztetését.
Példakód A szabályt megsértő és a szabálynak megfelelő példák kijavítása.
Kapcsolódó szabályok Kapcsolódó szabályok.