CA5360: Anropa inte farliga metoder vid deserialisering

Egenskap Värde
Regel-ID CA5360
Title Anropa inte farliga metoder vid deserialisering
Kategori Säkerhet
Korrigeringen är antingen invasiv eller icke-invasiv Oumbrytbar
Aktiverad som standard i .NET 10 Nej
Tillämpliga språk C# och Visual Basic

Orsak

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

Alla metoder som uppfyller något av följande krav kan fungera som återanrop vid 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 så att de inte automatiskt kör deserialiseringsåteranrop. 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, kryptografiskt signera de serialiserade uppgifterna. 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);
    }
}