system.text.json - jsonserializer - süsteemiteksti JSON-i serialiseerimine

System.Text.Json vaikeväärtused .NET-is: kui mugavus avab andmete nähtavuse

Vaikimisi süsteemiteksti JSON-serialiseerimise vaikivad riskid

System.Text.Json teek on saanud enamiku tänapäevaste .NET-rakenduste vaikesäteteks. See on tõhus, kerge ja sügavalt integreeritud ASP.NET Core'i. Kuid samad vaikesätted, mis selle lihtsaks teevad, toovad kaasa ka vaikseid turvariske. Vaikimisi serialiseerib System.Text.Json automaatselt kõik avalikud atribuudid, isegi need, mis sisaldavad tundlikke andmeid, näiteks märke või sisemisi identifikaatoreid. Arendajad toetuvad kiiruse huvides sageli nendele vaikesätetele, unustades, et nad võivad API vastustes konfidentsiaalset teavet avaldada (jsonserializer). 

⚠️Ebaturvaline näide, ainult hariduslikul eesmärgil. Ärge kasutage tootmises.

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..."} 

See jsonserialiseerija käitumine paljastab Sessiooni tunnus sest kõik avalikud omadused serialiseeritakse automaatselt.

Turvaline versioon:

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

Hariv märkus: Kasutage alati [JsonIgnore] tundlike omaduste jaoks või kavandage eraldi DTO-d, mis sisaldavad ainult serialiseerimiseks mõeldud välju.

Kuidas JsonSerializer laiendab kokkupuudet ilma hoiatuseta

System.Text.Json failis olev JsonSerializer ei peatu pinna tasandil. See läbib rekursiivselt pesastatud objekte, kollektsioone ja enum-väärtusi, serialiseerides kõike, millele tal on juurdepääs. Ilma selgesõnalise välistamiseta võib see kergesti viia pesastatud andmelekkeni, eriti kui sisemised objektid sisaldavad märke, identifikaatoreid või seansivõtmeid.

⚠️Ebaturvaline näide, ainult hariduslikul eesmärgil. Ärge kasutage tootmises.

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"}} 

Pesastatud objekt muudab süsteemiteksti JSON-seerialiseerimise tundlikuks Juurdepääsuluba automaatselt.

Turvaline versioon:

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); 

Hariv märkus: Alati määratle JsonSerializerOptions selgesõnaliselt ja vaadake pesastatud tüübid üle tahtmatu andmete avalikustamise suhtes.

API-de ja mikroteenuste reaalne mõju

Reaalsetes .NET-rakendustes jäävad need serialiseerimise riskid sageli märkamatuks kuni juurutamiseni. Automatiseerimise, DTO taaskasutamise ja vaikimisi jsonserialiseerija käitumise kombinatsioon võimendab kokkupuudet. Levinud mustrid, kus ebaturvaline serialiseerimine lekib andmeid:

  • EF Core'i üksuste otsene taaskasutamine API vastustes.
    Autentimisandmeid sisaldavate serialiseeritud objektide logimine.
  • Mudelite jagamine sise- ja avalike teenuste vahel CI/CD pipelines.

⚠️Ebaturvaline näide, ainult hariduslikul eesmärgil. Ärge kasutage tootmises.

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

Kui kaasa sisaldab Parooliräsi or Sessiooni tunnus, need on nüüd salvestatud CI/CD logid, rikkudes vähima privileegi põhimõtted. Ärge kunagi avaldage päris tokeneid, volitusi ega sisemisi URL-e pipelines.

Turvaline versioon:

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

Hariv märkus: Enne logimist desinfitseerige või tühistage tundlikud väljad ja kasutage alati ohutuid JsonSerializerOptions auditi väljundi vaikesätted.

Arendajatele mõeldud ohutu serialiseerimise tavad

Arendajad peaksid käsitlema vaikeväärtusi system.text.json mugavuskihina, mitte turvapoliitikana. Turvaline süsteemiteksti JSON-i serialiseerimine tähendab kontrolli võtmist selle üle, mis teie rakendusest lahkub.

Praktilised kaitsemeetmed

  1. Määratlege selgesõnalised lepingud: Loo API vastuste jaoks spetsiaalsed DTO-d, ära kunagi serialiseeri EF-e ega domeeniüksusi otse.
  2. Globaalsete valikute seadistamine: Kasutama JsonSerializerOptions.DefaultIgnoreCondition ja Kinnisvara nimetamise poliitika.
  3. kehtima [JsonIgnore] või muundurid: Peida või muuta tundlikke andmeid.
  4. Väljundite valideerimine: Kontrollige testides tegelikke serialiseeritud vastuseid.
  5. Automatiseeri kontrollid: Lisa serialiseerimise valideerimine CI/CD.

Mini ennetav kontrollnimekiri

  • Vaadake kõik klassid üle, kasutades System.Text.Json serialiseerimist
  • Märkige saladused või volitused [JsonIgnore]
  • Määrake globaalsed turvalised vaikesätted jaotises Programm.cs or Startup.cs
  • Vältige logides otsest serialiseerimist
  • Lisage oma programmidesse serialiseerimisega kokkupuute testid CI/CD pipeline

Hariv märkus: Ohutu serialiseerimise eesmärk on vähendada nähtavust, mitte lisada keerukust. Tehke serialiseerimine selgesõnaliseks ja testitavaks.

Ebaturvalise serialiseerimise tuvastamine automaatse skaneerimise abil – System.Text.Json

Automatiseeritud skaneerimine CI/CD Aitab tuvastada System.Text.Jsoni ja JsonSerializeri riskantset kasutamist. Staatilise analüüsi tööriistad suudavad tuvastada:

  • Puuduvad mudelid [JsonIgnore].
  • DTO-des paljastatud tundlikud väljad.
  • Ebaturvalised globaalsed vaikesätted (nt ignoreerimistingimuste puudumine).

Näide Pipeline Vaata

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

Hariv märkus: Integreerimine staatilised kontrollid sinu sisse CI/CD tagab järjepideva kontrolli süsteemiteksti JSON-serialiseerimise üle kõigis järkudes.

 

Kuidas Xygeni Code Security Tugevdab .NET-i serialiseerimise turvalisust

Xygeni Code Security Pakub süvatuvastust ohtlike System.Text.Json vaikeväärtuste ja JsonSerializer väärkasutamise tuvastamiseks NET-is.

See tuvastab selliseid mustreid nagu:

  • Tundlikud väljad on vaikimisi serialiseeritavad.
  • JSON-andmete ebaturvaline logimine.
  • Puuduvad [JsonIgnore] atribuudid.
  • Valesti konfigureeritud süsteemiteksti JSON-i serialiseerimisvalikud.

Integreerides Xygeni sisse pre-commit hooks, CI/CD pipelines ehk PR-väravate abil saate blokeerida haavatavaid serialiseerimismustreid enne nende ühendamist. See täiendab teie olemasolevat DevSecOps protsessi, muutes serialiseerimise valekonfiguratsioonid jõustatavateks turvapoliitikateks.

Hariv märkus: Turvatööriistad, näiteks Xygeni, jõustavad serialiseerimishügieeni automaatselt, vabastades arendajad keskenduma koodile, mitte audititele.

Kokkuvõte – Teave System.Text.Json

System.Text.Json muudab serialiseerimise kiireks, kuid mugavus varjab sageli nähtavust. Vaikimisi hõlmab system.text.json serialiseerimine kõiki avalikke omadusi, mis võivad lekkida sisemisi andmeid, märke või identifikaatoreid.

Arendajad peaksid:

  • Auditeerige nende mudeleid.
  • Kasutama [JsonIgnore] ja ohutu JsonSerializerOptions.
  • Väldi sisemiste objektide serialiseerimist.
  • Automatiseerige skannimine selliste tööriistade abil nagu Xygeni Code Security.

Vaikimisi serialiseerimine pole lihtsalt arendaja otsetee; see on potentsiaalne andmete lekke oht. Tehke serialiseerimine selgesõnaliseks, kontrollige väljundeid ja automatiseerige kontrollid, sest ohutud vaikesätted ei ole alati ohutud.

sca-tööriistad-tarkvara-kompositsiooni-analüüsi-tööriistad
Tarkvarariskide prioriseerimine, leevendamine ja turvamine
Hankige oma tasuta konto.
Krediitkaarti pole vaja.

Turvaline tarkvaraarendus ja -tarne

Xygeni tootekomplektiga