system.text.json - jsonserializer - Systemtext JSON Serialiséierung

System.Text.Json Standardastellungen an .NET: Wann Convenience Datenexpositioun opmécht

Stille Risiken an der Standard-Systemtext-JSON-Serialiséierung

D'System.Text.Json Bibliothéik ass zum Standard fir déi meescht modern .NET Applikatiounen ginn. Si ass effizient, liicht an déif an den ASP.NET Core integréiert. Mä déiselwecht Standardastellungen, déi et einfach maachen, bréngen och roueg Sécherheetsrisiken mat sech. Standardméisseg serialiséiert d'System.Text.Json Serialiséierung automatesch all ëffentlech Properties, och déi, déi sensibel Donnéeën wéi Tokens oder intern Identifizéierer enthalen. Entwéckler vertrauen dacks op dës Standardastellungen fir Geschwindegkeet, a vergiessen datt se vertraulech Informatiounen an API-Äntwerten (jsonserializer) kéinte weisen. 

⚠️Onséchert Beispill, nëmme fir pädagogesch Zwecker. Net an der Produktioun benotzen.

public class UserProfile {     public string UserName { get; set; }     public string Email { get; set; }     public string SessionToken { get; set; }  // Sensitive field }   var json = JsonSerializer.Serialize(userProfile); Console.WriteLine(json); // Output: {"UserName":"alex","Email":"alex@example.com","SessionToken":"eyJhbGciOi..."} 

Dëst Jsonserializer-Verhalen stellt fest SessionToken well all ëffentlech Eegeschafte automatesch serialiséiert ginn.

Sécher Versioun:

public class UserProfile {     public string UserName { get; set; }     public string Email { get; set; }       [JsonIgnore] // Prevent serialization of sensitive fields     public string SessionToken { get; set; } } 

Educatiounsnotiz: Ëmmer benotzen [JsonIgnore] fir sensibel Eegeschaften oder separat DTOen designen, déi nëmme Felder enthalen, déi fir d'Serialiséierung geduecht sinn.

Wéi JsonSerializer d'Expositioun ouni Warnung erweidert

De JsonSerializer am System.Text.Json hält net op der Uewerfläch op. Hie geet rekursiv duerch verschachtelt Objeten, Kollektiounen an Enum-Wäerter a serialiséiert alles, op wat e zougräife kann. Ouni explizit Ausgrenzung kann dëst liicht zu verschachtelten Datenlecks féieren, besonnesch wann intern Objeten Tokens, Identifikatoren oder Sessiounsschlësselen enthalen.

⚠️Onséchert Beispill, nëmme fir pädagogesch Zwecker. Net an der Produktioun benotzen.

public class AuthData {     public string AccessToken { get; set; } // Sensitive }   public class ApiResponse {     public string Message { get; set; }     public AuthData AuthInfo { get; set; }  // Nested object }   var json = JsonSerializer.Serialize(new ApiResponse {     Message = "OK",     AuthInfo = new AuthData { AccessToken = "abc123" } }); Console.WriteLine(json); // Output: {"Message":"OK","AuthInfo":{"AccessToken":"abc123"}} 

Den ageschachtelten Objet suergt dofir, datt d'JSON-Serialisatioun vum Systemtext déi sensibel Objete enthält. Zougangstoken automatesch.

Sécher Versioun:

public class AuthData {     [JsonIgnore] // Prevent exposure of sensitive tokens     public string AccessToken { get; set; } }   public class ApiResponse {     public string Message { get; set; }     public AuthData AuthInfo { get; set; } }   var options = new JsonSerializerOptions {     DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault,     WriteIndented = false };   var json = JsonSerializer.Serialize(apiResponse, options); 

Educatiounsnotiz: Ëmmer definéieren JsonSerializerOptiounen explizit an iwwerpréift verschachtelt Typen op ongewollt Datenexpositioun.

Impakt op d'real Welt an APIen a Mikroservicer

A realen .NET Applikatiounen bleiwen dës Serialiséierungsrisiken dacks onbemierkt bis nom Asaz. D'Kombinatioun vun Automatiséierung, DTO-Wiederverwendung an dem Standard-Jsonserializer-Verhalen verstäerkt d'Expositioun. Heefeg Mustere wou onsécher Serialiséierung Daten leckt:

  • EF Core Entitéiten direkt an API-Äntwerten nei benotzen.
    Serialiséiert Objeten, déi Authentifikatiounsdaten enthalen, protokolléieren.
  • Deele vu Modeller tëscht internen an ëffentleche Servicer an CI/CD pipelines.

⚠️Onséchert Beispill, nëmme fir pädagogesch Zwecker. Net an der Produktioun benotzen.

// Logs the full object, including sensitive fields _logger.LogInformation("Response: {data}", JsonSerializer.Serialize(result)); 

wann der Resultat enthält PasswuertHash or SessionToken, dës sinn elo gespäichert an CI/CD Logbicher, Verletzung Prinzipie vun de mannst Privilegien. Ni richteg Tokens, Umeldungsinformatiounen oder intern URLen ausstellen pipelines.

Sécher Versioun:

var options = new JsonSerializerOptions {     IgnoreReadOnlyProperties = true,     DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull }; // Sanitize before serialization result.SessionToken = null; _logger.LogInformation("Response: {data}", JsonSerializer.Serialize(result, options)); 

Educatiounsnotiz: Sensibel Felder virum Logging sanéieren oder nulliséieren, a ëmmer sécher Astellungen benotzen JsonSerializerOptiounen Standardastellungen fir Audit-Ausgaben.

Sécher Serialiséierungspraktiken fir Entwéckler

Entwéckler sollten d'Standardastellungen vum system.text.json als Komfortschicht behandelen, net als Sécherheetspolitik. Sécher Systemtext JSON Serialiséierung bedeit d'Kontroll iwwer dat ze iwwerhuelen, wat Är Applikatioun verléisst.

Praktesch Verteidegung

  1. Definéiert explizit Kontrakter: Erstellt dedizéiert DTOen fir API-Äntwerten, serialiséiert ni EF- oder Domain-Entitéiten direkt.
  2. Global Optiounen konfiguréieren: benotzt JsonSerializerOptions.DefaultIgnoreCondition an Politik fir d'Bezeechnung vun der Propriétéit.
  3. gëllen [JsonIgnore] oder Konverter: Sensibel Donnéeën verstoppen oder transforméieren.
  4. Ausgäng validéieren: Iwwerpréift tatsächlech serialiséiert Äntwerten an Tester.
  5. Automatiséiert Kontrollen: Serialisatiounsvalidatioun anfüügen CI/CD.

Mini-präventiv Checklëscht

  • Iwwerpréift all Klassen mat der System.Text.Json Serialiséierung
  • Geheimnisser oder Umeldungsinformatioune mat markéieren [JsonIgnore]
  • Definéiert global sécher Standarden an Programm.cs or Startup.cs
  • Vermeit direkt Serialiséierung a Logbicher
  • Integréiert Serialiséierungs-Expositiounstester an Ärem CI/CD pipeline

Educatiounsnotiz: Bei enger sécherer Serialiséierung geet et drëm, d'Expositioun ze limitéieren, net d'Komplexitéit ze erhéijen. Maacht d'Serialiséierung explizit an testbar.

Onsécher Serialiséierung mat automatiséiertem Scannen erkennen – System.Text.Json

Automatiséiert Scannen an CI/CD hëlleft riskant Notzung vu System.Text.Json an JsonSerializer z'entdecken. Statesch Analysetools kënnen identifizéieren:

  • Modeller feelen [JsonIgnore].
  • Sensibel Felder, déi an DTOen ausgesat sinn.
  • Onsécher global Standardastellungen (z.B. Mangel un Ignoréierungskonditiounen).

Beispill Pipeline kontrolléieren

# Never expose real tokens, credentials, or internal URLs in pipelines - name: Run serialization security checks   run: dotnet xygeni validate --rules serialization --fail-on-risk 

Educatiounsnotiz: Integratioun statesch Kontrollen an Är CI/CD garantéiert eng konsequent Kontroll iwwer d'JSON-Serialiséierung vum Systemtext iwwer all Builds.

 

wéi Xygeni Code Security Stäerkt d'Sécherheet vun der .NET Serialiséierung

Xygeni Code Security bitt eng déif Detektioun fir onsécher System.Text.Json-Standarden a Mëssbrauch vum JsonSerializer am NET.

Et identifizéiert Mustere wéi:

  • Sensibel Felder ginn standardméisseg serialiséiert.
  • Onsécher Logging vun JSON-Daten.
  • vermësst [JsonIgnore] Attributer.
  • Falsch konfiguréiert JSON-Serialiséierungsoptioune vum Systemtext.

Duerch Integratioun Xygeni an pre-commit hooks, CI/CD pipelines, oder PR-Gates, kënnt Dir vulnérabel Serialiséierungsmuster blockéieren, ier se fusionéieren. Et ergänzt Äre bestehenden DevSecOps-Prozess andeems et Fehlkonfiguratiounen vun der Serialiséierung an duerchsetzbar Sécherheetsrichtlinne verwandelt.

Educativ Notiz: Sécherheetsinstrumenter wéi Xygeni erzwingen d'Serialisatiounshygiene automatesch, sou datt d'Entwéckler sech op de Code konzentréiere kënnen, net op Audits.

Conclusioun – Iwwer System.Text.Json

System.Text.Json mécht d'Serialisatioun séier, awer d'Komfort verstoppt dacks d'Expositioun. Déi standardméisseg system.text.json Serialiséierung enthält all ëffentlech Propriétéit, wouduerch intern Daten, Tokens oder Identifikatoren eventuell lecke kënnen.

Entwéckler sollten:

  • Iwwerpréift hir Modeller.
  • benotzt [JsonIgnore] a sécher JsonSerializerOptiounen.
  • Vermeit d'Serialiséierung vun internen Objeten.
  • Automatiséiert Scannen mat Tools wéi Xygeni Code Security.

Standardserialiséierung ass net nëmmen eng Ofkierzung fir Entwéckler; et ass e potenziellen Datenleck. Maacht d'Serialiséierung explizit, verifizéiert d'Ausgaben an automatiséiert d'Kontrollen, well sécher Standardastellungen net ëmmer sécher sinn.

sca-tools-software-zesummesetzungsanalyse-tools
Prioritäriséiert, behënnert a séchert Är Softwarerisiken
Kritt Äre gratis Kont.
Kee Kreditkaart erfuerderlech.

Séchert Är Softwareentwécklung a Liwwerung

mat der Xygeni Produkt Suite