CA5400: Ujistěte se, že kontrola seznamu odvolaných certifikátů HttpClient není zakázaná.
Vlastnost | Hodnota |
---|---|
ID pravidla | CA5400 |
Název | Zkontrolujte, že kontrola seznamu odvolaných certifikátů HttpClient není vypnutá. |
Kategorie | Zabezpečení |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 8 | No |
Příčina
Použití System.Net.Http.HttpClient při poskytování obslužné rutiny specifické pro platformu (System.Net.Http.WinHttpHandler nebo System.Net.Http.HttpClientHandler), jejíž CheckCertificateRevocationList
vlastnost je pravděpodobně nastavena false
, umožní odvolání certifikátů, aby byly přijaty HttpClient jako platné.
Toto pravidlo je podobné ca5399, ale analýza nemůže určit, že CheckCertificateRevocationList
vlastnost je rozhodně false
nebo není nastavena.
Popis pravidla
Odvolaný certifikát už není důvěryhodný. Útočníci ho můžou použít předáním některých škodlivých dat nebo krádeží citlivých dat při komunikaci HTTPS.
Jak opravit porušení
System.Net.Http.HttpClientHandler.CheckCertificateRevocationList Nastavte vlastnost explicitnětrue
. CheckCertificateRevocationList Pokud je vlastnost nedostupná, musíte upgradovat cílovou architekturu.
Kdy potlačit upozornění
Pokud jste si jisti, že je vlastnost správně nastavená, CheckCertificateRevocationList
je bezpečné toto pravidlo potlačit.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA5400
// The code that's violating the rule is on this line.
#pragma warning restore CA5400
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA5400.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Konfigurace kódu pro analýzu
Pomocí následujících možností můžete nakonfigurovat, pro které části základu kódu se má toto pravidlo spouštět.
Tuto možnost můžete nakonfigurovat jenom pro toto pravidlo, pro všechna pravidla, která platí, nebo pro všechna pravidla v této kategorii (zabezpečení), na která platí. Další informace naleznete v tématu Možnosti konfigurace pravidla kvality kódu.
Vyloučení konkrétních symbolů
Z analýzy můžete vyloučit konkrétní symboly, jako jsou typy a metody. Pokud chcete například určit, že pravidlo by se nemělo spouštět u žádného kódu v rámci pojmenovaných MyType
typů, přidejte do souboru .editorconfig v projektu následující dvojici klíč-hodnota:
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType
Povolené formáty názvů symbolů v hodnotě možnosti (oddělené ):|
- Pouze název symbolu (zahrnuje všechny symboly s názvem bez ohledu na typ nebo obor názvů).
- Plně kvalifikované názvy ve formátu ID dokumentace symbolu. Každý název symbolu vyžaduje předponu typu symbolu, například
M:
pro metody,T:
typy aN:
obory názvů. .ctor
pro konstruktory a.cctor
statické konstruktory.
Příklady:
Hodnota možnosti | Shrnutí |
---|---|
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType |
Odpovídá všem symbolům s názvem MyType . |
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 |
Porovná všechny symboly pojmenované buď MyType1 nebo MyType2 . |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) |
Odpovídá konkrétní metodě MyMethod se zadaným plně kvalifikovaným podpisem. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) |
Odpovídá konkrétním metodám MyMethod1 a MyMethod2 příslušným plně kvalifikovaným podpisům. |
Vyloučení konkrétních typů a jejich odvozených typů
Z analýzy můžete vyloučit konkrétní typy a jejich odvozené typy. Pokud chcete například určit, že pravidlo by se nemělo spouštět u žádné metody v rámci pojmenovaných MyType
typů a jejich odvozených typů, přidejte do souboru .editorconfig v projektu následující dvojici klíč-hodnota:
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType
Povolené formáty názvů symbolů v hodnotě možnosti (oddělené ):|
- Pouze název typu (zahrnuje všechny typy s názvem bez ohledu na typ nebo obor názvů).
- Plně kvalifikované názvy ve formátu ID dokumentace symbolu s volitelnou
T:
předponou.
Příklady:
Hodnota možnosti | Shrnutí |
---|---|
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType |
Odpovídá všem pojmenovaným MyType typům a všem jejich odvozeným typům. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 |
Odpovídá všem typům pojmenovaným buď MyType1 nebo MyType2 a všem jejich odvozeným typům. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType |
Odpovídá určitému typu MyType s daným plně kvalifikovaným názvem a všemi jeho odvozenými typy. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 |
Odpovídá konkrétním typům MyType1 a MyType2 příslušným plně kvalifikovaným názvům a všem jejich odvozeným typům. |
Příklady pseudokódu
using System;
using System.Net.Http;
class ExampleClass
{
void ExampleMethod(bool checkCertificateRevocationList)
{
WinHttpHandler winHttpHandler = new WinHttpHandler();
winHttpHandler.CheckCertificateRevocationList = checkCertificateRevocationList;
Random r = new Random();
if (r.Next(6) == 4)
{
winHttpHandler.CheckCertificateRevocationList = true;
}
HttpClient httpClient = new HttpClient(winHttpHandler);
}
}
Řešení
using System.Net.Http;
class ExampleClass
{
void ExampleMethod()
{
WinHttpHandler winHttpHandler = new WinHttpHandler();
winHttpHandler.CheckCertificateRevocationList = true;
HttpClient httpClient = new HttpClient(winHttpHandler);
}
}