CA5360: Nevolejte nebezpečné metody při deserializaci

Vlastnost Hodnota
ID pravidla CA5360
Název Nevolejte nebezpečné metody při deserializaci
Kategorie Zabezpečení
Oprava, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Ne
Příslušné jazyky C# a Visual Basic

Příčina

Volání jedné z následujících nebezpečných metod při deserializaci:

Metody, které splňují jeden z následujících požadavků, mohou být zpětným voláním deserializace:

Popis pravidla

Nezabezpečená deserializace je ohrožení zabezpečení, ke kterému dochází v případě, že se nedůvěryhodná data používají ke zneužití logiky aplikace, způsobí útok DoS (Denial-of-Service) nebo dokonce spustí libovolný kód při deserializaci. Uživatelům se zlými úmysly je často možné zneužít tyto funkce deserializace, když aplikace deserializuje nedůvěryhodná data, která jsou pod jejich kontrolou. Konkrétně vyvolat nebezpečné metody v procesu deserializace. Úspěšné nezabezpečené útoky deserializace by mohly útočníkovi umožnit provádět útoky, jako jsou útoky DoS, obtékání ověřování a vzdálené spuštění kódu.

Jak opravit porušení

Odeberte tyto nebezpečné metody z automaticky spouštěných zpětných volání deserializace. Volat nebezpečné metody až po ověření vstupu.

Kdy potlačit upozornění

Toto pravidlo 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.
  • Serializovaná data jsou odolná proti neoprávněné manipulaci. Po serializaci kryptograficky podepisujte serializovaná data. Před deserializací ověřte kryptografický podpis. Chraňte kryptografický klíč před zveřejněním a navrhněte obměny klíčů.
  • Data jsou pro aplikaci ověřená jako bezpečná.

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 CA5360
// The code that's violating the rule is on this line.
#pragma warning restore CA5360

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.CA5360.severity = none

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Příklady pseudokódu

Porušení

using System;
using System.IO;
using System.Runtime.Serialization;

[Serializable()]
public class ExampleClass : IDeserializationCallback
{
    private string member;

    void IDeserializationCallback.OnDeserialization(Object sender)
    {
        var sourceFileName = "malicious file";
        var destFileName = "sensitive file";
        File.Copy(sourceFileName, destFileName);
    }
}

Řešení

using System;
using System.IO;
using System.Runtime.Serialization;

[Serializable()]
public class ExampleClass : IDeserializationCallback
{
    private string member;

    void IDeserializationCallback.OnDeserialization(Object sender)
    {
        var sourceFileName = "malicious file";
        var destFileName = "sensitive file";
        // Remove the potential dangerous operation.
        // File.Copy(sourceFileName, destFileName);
    }
}