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 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

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

Všechny metody splňují jeden z následujících požadavků může být zpětné volání 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 automatického spouštění zpětného 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 manipulována proti 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 návrhem 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);
    }
}