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 8-ban | Nem |
Ok
Ez a szabály akkor aktiválódik, ha a következő feltételek valamelyike teljesül:
- A rendszer a Newtonsoft.Json.TypeNameHandling enumerálási értékre hivatkozik, amely
None
nem az . - 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 nem a Newtonsoft.Json.TypeNameHandling értékeket None
keresi meg. 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
None
TypeNameHandling é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.JsonSerializer Gépház van megadva. SzerializationBinder tulajdonság. 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 ISerializationBindert a TypeNameHandling értékein kívül
None
más értékeket használjon.
- 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 ISerializationBindert a TypeNameHandling értékein kívü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ése
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
Kapcsolódó szabályok
CA2327: Ne használjon nem biztonságos JsonSerializert Gépház
CA2328: Győződjön meg arról, hogy a JsonSerializer Gépház biztonságosak
CA2329: Ne deszerializálja a JsonSerializert nem biztonságos konfiguráció használatával
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: