CA2326: Nepoužívejte jiné hodnoty TypeNameHandling než None
Vlastnost | Hodnota |
---|---|
ID pravidla | CA2326 |
Název | Nepoužívejte jiné hodnoty TypeNameHandling než None |
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
Toto pravidlo se aktivuje, pokud jsou splněny některé z následujících podmínek:
- Na hodnotu výčtu Newtonsoft.Json.TypeNameHandling , která
None
není odkazovaná. - Celočíselná hodnota představující nenulovou hodnotu je přiřazena proměnné TypeNameHandling .
Popis pravidla
Nezabezpečené deserializátory jsou zranitelné při deserializaci nedůvěryhodných dat. Útočník by mohl serializovaná data upravit tak, aby zahrnovala neočekávané typy pro vložení objektů se škodlivými vedlejšími účinky. Útok na nezabezpečený deserializátor může například spouštět příkazy v podkladovém operačním systému, komunikovat přes síť nebo odstraňovat soubory.
Toto pravidlo najde jiné hodnoty Newtonsoft.Json.TypeNameHandling než None
. Pokud chcete deserializovat pouze v případě, že je zadán Newtonsoft.Json.Serialization.ISerializationBinder k omezení deserializovaných typů, zakažte toto pravidlo a povolte pravidla CA2327, CA2328, CA2329 a CA2330 .
Jak opravit porušení
- Pokud je to možné, použijte hodnotu TypeNameHandling
None
. - Zfalšujte serializovaná data a zfalšujte je. Po serializaci kryptograficky podepisujte serializovaná data. Před deserializací ověřte kryptografický podpis. Chraňte kryptografický klíč před zveřejněním a návrhem obměny klíčů.
- Omezit deserializované typy Implementujte vlastní Newtonsoft.Json.Serialization.ISerializationBinder. Před deserializací pomocí Json.NET se ujistěte, že je v Newtonsoft.Json.JsonSerializer zadán vlastní ISerializationBinder Nastavení. SerializationBinder vlastnost. V přepsání Newtonsoft.Json.Serialization.ISerializationBinder.BindToType metoda, pokud je typ neočekávaný, vrátit
null
nebo vyvolat výjimku pro zastavení deserializace.- Pokud omezíte deserializované typy, můžete toto pravidlo zakázat a povolit pravidla CA2327, CA2328, CA2329 a CA2330. Pravidla CA2327, CA2328, CA2329 a CA2330 pomáhají zajistit použití ISerializationBinder při použití jiných hodnot TypeNameHandling než
None
.
- Pokud omezíte deserializované typy, můžete toto pravidlo zakázat a povolit pravidla CA2327, CA2328, CA2329 a CA2330. Pravidla CA2327, CA2328, CA2329 a CA2330 pomáhají zajistit použití ISerializationBinder při použití jiných hodnot TypeNameHandling než
Kdy potlačit upozornění
Upozornění z tohoto pravidla je bezpečné potlačit, pokud:
- Víte, že vstup je důvěryhodný. Vezměte v úvahu, že hranice důvěryhodnosti vaší aplikace a toky dat se můžou v průběhu času měnit.
- Provedli jste jedno z bezpečnostních opatření v části Jak opravit porušení.
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 CA2326
// The code that's violating the rule is on this line.
#pragma warning restore CA2326
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.CA2326.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Příklady pseudokódu
Porušení
using Newtonsoft.Json;
public class ExampleClass
{
public JsonSerializerSettings Settings { get; }
public ExampleClass()
{
Settings = new JsonSerializerSettings();
Settings.TypeNameHandling = TypeNameHandling.All; // CA2326 violation.
}
}
Imports Newtonsoft.Json
Public Class ExampleClass
Public ReadOnly Property Settings() As JsonSerializerSettings
Public Sub New()
Settings = New JsonSerializerSettings()
Settings.TypeNameHandling = TypeNameHandling.All ' CA2326 violation.
End Sub
End Class
Řešení
using Newtonsoft.Json;
public class ExampleClass
{
public JsonSerializerSettings Settings { get; }
public ExampleClass()
{
Settings = new JsonSerializerSettings();
// The default value of Settings.TypeNameHandling is TypeNameHandling.None.
}
}
Imports Newtonsoft.Json
Public Class ExampleClass
Public ReadOnly Property Settings() As JsonSerializerSettings
Public Sub New()
Settings = New JsonSerializerSettings()
' The default value of Settings.TypeNameHandling is TypeNameHandling.None.
End Sub
End Class
Související pravidla
CA2327: Nepoužívejte nezabezpečený JsonSerializer Nastavení
CA2328: Ujistěte se, že je zabezpečený jsonSerializer Nastavení
CA2329: Ne deserializovat pomocí JsonSerializer pomocí nezabezpečené konfigurace
CA2330: Ujistěte se, že má jsonSerializer při deserializaci zabezpečenou konfiguraci.