CA2326: Ne használjon TypeNameHandling értékeket a None értéken kívül

Tulajdonság Érték
Szabályazonosító CA2326
Cím Ne használjon TypeNameHandling értékeket a None értéken kívül
Kategória Biztonság
A javítás romboló vagy nem romboló Nem törhető
Alapértelmezés szerint engedélyezve a .NET 10-ben Nem
Alkalmazandó nyelvek C# és Visual Basic

Ok

Ez a szabály akkor aktiválódik, ha a következő feltételek valamelyike teljesül:

  • A Newtonsoft.Json.TypeNameHandling enumerációs értékre hivatkozik, amely eltér a None értéktől.
  • A typeNameHandling változóhoz egy nem nulla értéket képviselő egész szám van hozzárendelve.

Szabály leírása

A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon. A nem biztonságos deszerializáló elleni támadás például parancsokat hajthat végre az alapul szolgáló operációs rendszeren, kommunikálhat a hálózaton keresztül, vagy fájlokat törölhet.

Ez a szabály megtalálja a Newtonsoft.Json.TypeNameHandling értékeket, amelyek eltérnek a None értéktől. Ha csak akkor szeretné deszerializálni, ha egy Newtonsoft.Json.Serialization.ISerializationBinder van megadva a deszerializált típusok korlátozásához, tiltsa le ezt a szabályt, és engedélyezze helyette a CA2327, a CA2328, a CA2329 és a CA2330 szabályokat.

Szabálysértések kijavítása

  • Ha lehetséges, használja a TypeNameHandlingNone értékét.
  • Tegye a szerializált adatokat manipulációbiztossá. A szerializálás után kriptográfiailag írja alá a szerializált adatokat. A deszerializálás előtt ellenőrizze a titkosítási aláírást. Védje meg a titkosítási kulcsot a nyilvánosságra hozataltól, és tervezzen kulcsforgatást.
  • Deszerializált típusok korlátozása. Implementáljon egy saját Newtonsoft.Json.Serialization.ISerializationBindert. Mielőtt a Json.NET deszerializálását végrehajtja, győződjön meg arról, hogy az egyéni ISerializationBinder meg van adva a Newtonsoft.Json.JsonSerializerSettings.SerializationBinder tulajdonságban. A felülbírált Newtonsoft.Json.Serialization.ISerializationBinder.BindToType metódusban, ha a típus váratlan, a deszerializálás leállításához adjon vissza null vagy adjon ki kivételt.
    • Ha korlátozza a deszerializált típusokat, érdemes lehet letiltani ezt a szabályt, és engedélyezni a CA2327, CA2328, CA2329 és CA2330 szabályokat. A CA2327, CA2328, CA2329 és CA2330 szabályok segítenek biztosítani, hogy az ISerializationBinder használatban legyen, amikor a TypeNameHandling értékek eltérők a None értéktől.

Mikor kell letiltani a figyelmeztetéseket?

A szabály figyelmeztetését nyugodtan letilthatja, ha:

  • Tudja, hogy a bemenet megbízható. Vegye figyelembe, hogy az alkalmazás megbízhatósági határa és az adatfolyamok idővel változhatnak.
  • Megtette a szabálysértések elhárításának egyik óvintézkedését.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

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

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

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

További információ: Kódelemzési figyelmeztetések letiltása.

Példák pszeudokódokra

Megsértés

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

Megoldás

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

CA2327: Ne használjon nem biztonságos JsonSerializerSettings-t

CA2328: Győződjön meg arról, hogy a JsonSerializerSettings biztonságos

CA2329: Ne deszerializálja a JsonSerializert nem biztonságos konfiguráció használatával

CA2330: Győződjön meg arról, hogy a JsonSerializer biztonságos konfigurációval rendelkezik a deszerializáláskor