Share via


CA5360: Anropa inte farliga metoder vid deserialisering

Property Värde
Regel-ID CA5360
Rubrik Anropa inte farliga metoder i deserialisering
Kategori Säkerhet
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Nej

Orsak

Anropa någon av följande farliga metoder i deserialisering:

Alla metoder uppfyller något av följande krav kan vara återanrop av deserialisering:

Regelbeskrivning

Osäker deserialisering är en säkerhetsrisk som uppstår när obetrodda data används för att missbruka logiken i ett program, orsaka en DoS-attack (Denial-of-Service) eller till och med köra godtycklig kod när den deserialiseras. Det är ofta möjligt för skadliga användare att missbruka dessa deserialiseringsfunktioner när programmet deserialiserar ej betrodda data som står under deras kontroll. Mer specifikt anropar du farliga metoder i processen för deserialisering. Lyckade osäkra deserialiseringsattacker kan göra det möjligt för en angripare att utföra attacker som DoS-attacker, förbikoppling av autentisering och körning av fjärrkod.

Så här åtgärdar du överträdelser

Ta bort dessa farliga metoder från att automatiskt köra återanrop till deserialisering. Anropa endast farliga metoder efter validering av indata.

När du ska ignorera varningar

Det är säkert att ignorera den här regeln om:

  • Du vet att indata är betrodda. Tänk på att programmets förtroendegräns och dataflöden kan ändras över tid.
  • Serialiserade data är manipuleringssäkra. Efter serialiseringen signerar kryptografiskt serialiserade data. Verifiera den kryptografiska signaturen innan deserialiseringen. Skydda den kryptografiska nyckeln från att avslöjas och utformas för nyckelrotationer.
  • Data verifieras som säkra för programmet.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

#pragma warning disable CA5360
// The code that's violating the rule is on this line.
#pragma warning restore CA5360

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

[*.{cs,vb}]
dotnet_diagnostic.CA5360.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.

Exempel på pseudokod

Kränkning

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);
    }
}

Lösning

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);
    }
}