Megosztás a következőn keresztül:


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 kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 9-ben Nem

Ok

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

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 nem a Newtonsoft.Json.TypeNameHandlingNonemeg. 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 None értékét.
  • Végezze el a szerializált adatok illetéktelen illetéktelen beavatkozását. 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 egyéni Newtonsoft.Json.Serialization.ISerializationBindert. Mielőtt Json.NET deszerializálna, győződjön meg arról, hogy az egyéni ISerializationBinder a Newtonsoft.Json.JsonSerializerSettings.SerializationBinder tulajdonságban van megadva. 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, a CA2328, a CA2329 és a CA2330 szabályok segítenek biztosítani, hogy az ISerializationBindertNone.

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