system.text.json - jsonserializer - pensiriulan json teks sistem

System.Text.Json Diaktifkan Secara Lalai dalam .NET: Apabila Kemudahan Membuka Pendedahan Data

Risiko Senyap dalam Pensirialisasian JSON Teks Sistem Lalai

Pustaka System.Text.Json telah menjadi lalai untuk kebanyakan aplikasi .NET moden. Ia cekap, ringan dan bersepadu sepenuhnya ke dalam ASP.NET Core. Tetapi lalai yang sama yang menjadikannya mudah juga memperkenalkan risiko keselamatan senyap. Secara lalai, pensirialisasian System.Text.Json secara automatik mensirialisasikan semua sifat awam, walaupun yang menyimpan data sensitif seperti token atau pengecam dalaman. Pembangun sering bergantung pada tetapan lalai ini untuk kelajuan, terlepas pandang bahawa ia mungkin mendedahkan maklumat sulit dalam respons API (jsonserializer). 

⚠️Contoh tidak selamat, untuk tujuan pendidikan sahaja. Jangan gunakan dalam pengeluaran.

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

Tingkah laku jsonserializer ini mendedahkan Token Sesi kerana semua hartanah awam bersiri secara automatik.

Versi selamat:

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

Nota pendidikan: Sentiasa gunakan [Abaikan Json] untuk sifat sensitif atau reka bentuk DTO berasingan yang hanya mengandungi medan yang bertujuan untuk penyirikan.

Bagaimana JsonSerializer Memperluas Pendedahan Tanpa Amaran

JsonSerializer dalam System.Text.Json tidak berhenti di paras permukaan. Ia berjalan secara rekursif melalui objek bersarang, koleksi dan nilai enum, menyiratkan semua yang boleh diaksesnya. Tanpa pengecualian yang jelas, ini boleh menyebabkan kebocoran data bersarang dengan mudah, terutamanya apabila objek dalaman mengandungi token, pengecam atau kunci sesi.

⚠️Contoh tidak selamat, untuk tujuan pendidikan sahaja. Jangan gunakan dalam pengeluaran.

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

Objek bersarang menjadikan pensirilan json teks sistem merangkumi yang sensitif AccessToken secara automatik.

Versi selamat:

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

Nota pendidikan: Sentiasa tentukan PilihanJsonSerializer secara eksplisit dan semak jenis bersarang untuk pendedahan data yang tidak disengajakan.

Impak Dunia Sebenar dalam API dan Perkhidmatan Mikro

Dalam aplikasi .NET dunia sebenar, risiko bersiri ini sering tidak disedari sehingga selepas penggunaan. Gabungan automasi, penggunaan semula DTO dan tingkah laku jsonserializer lalai menguatkan pendedahan. Corak biasa di mana penyirian yang tidak selamat membocorkan data:

  • Menggunakan semula entiti EF Core secara langsung dalam respons API.
    Melog objek bersiri yang mengandungi data pengesahan.
  • Perkongsian model antara perkhidmatan dalaman dan awam dalam CI/CD pipelines.

⚠️Contoh tidak selamat, untuk tujuan pendidikan sahaja. Jangan gunakan dalam pengeluaran.

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

Jika mengakibatkan mengandungi Hash Kata Laluan or Token Sesi, ini kini disimpan dalam CI/CD kayu balak, melanggar prinsip-prinsip keistimewaan paling rendah. Jangan sekali-kali mendedahkan token, kelayakan atau URL dalaman sebenar dalam pipelines.

Versi selamat:

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

Nota pendidikan: Sanitasi atau batalkan medan sensitif sebelum log masuk, dan sentiasa gunakan PilihanJsonSerializer lalai untuk output audit.

Amalan Pensirialisasian Selamat untuk Pembangun

Pembangun harus melayan tetapan lalai system.text.json sebagai lapisan kemudahan, bukan dasar keselamatan. Pensirihan JSON teks sistem selamat bermaksud mengawal apa yang keluar dari aplikasi anda.

Pertahanan Praktikal

  1. Takrifkan kontrak eksplisit: Cipta DTO khusus untuk respons API, jangan sesekali bersirikan EF atau entiti domain secara langsung.
  2. Konfigurasikan pilihan global: Penggunaan JsonSerializerOptions.DefaultIgnoreCondition dan Dasar Penamaan Hartanah.
  3. Memohon [Abaikan Json] atau penukar: Sembunyikan atau ubah data sensitif.
  4. Sahkan output: Periksa respons bersiri sebenar dalam ujian.
  5. Automatikkan pemeriksaan: Sertakan pengesahan bersiri dalam CI/CD.

Senarai Semak Pencegahan Mini

  • Semak semua kelas menggunakan pensirialisasian System.Text.Json
  • Tandakan rahsia atau kelayakan dengan [Abaikan Json]
  • Takrifkan lalai selamat global dalam Program.cs or Startup.cs
  • Elakkan pensirilan langsung dalam log
  • Sertakan ujian pendedahan bersiri dalam CI/CD pipeline

Nota pendidikan: Pensirialisasian yang selamat adalah tentang mengehadkan pendedahan, bukan menambah kerumitan. Pastikan pensirialisasian eksplisit dan boleh diuji.

Mengesan Pensirialisasian Tidak Selamat dengan Pengimbasan Automatik – System.Text.Json

Pengimbasan automatik dalam CI/CD membantu mengesan penggunaan System.Text.Json dan JsonSerializer yang berisiko. Alat analisis statik boleh mengenal pasti:

  • Model hilang [Abaikan Json].
  • Medan sensitif terdedah dalam DTO.
  • Keingkaran global yang tidak selamat (contohnya, kekurangan syarat abaikan).

Contoh Pipeline daftar

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

Nota pendidikan: Mengintegrasikan pemeriksaan statik ke dalam anda CI/CD memastikan kawalan yang konsisten ke atas pensirilan JSON teks sistem merentasi semua binaan.

 

Cara Xygeni Code Security Memperkukuhkan Keselamatan Pensirialisasian .NET

Xygeni Code Security menyediakan pengesanan mendalam untuk lalai System.Text.Json yang tidak selamat dan penyalahgunaan JsonSerializer dalam NET.

Ia mengenal pasti corak seperti:

  • Medan sensitif bersiri secara lalai.
  • Pembalakan data JSON yang tidak selamat.
  • Hilang [Abaikan Json] sifat.
  • Pilihan pensirihan JSON teks sistem yang salah dikonfigurasikan.

Dengan mengintegrasikan Xygeni ke dalam pre-commit hooks, CI/CD pipelines, atau pintu PR, anda boleh menyekat corak bersiri terdedah sebelum ia bergabung. Ia melengkapi proses DevSecOps sedia ada anda dengan menukar salah konfigurasi bersiri kepada dasar keselamatan yang boleh dikuatkuasakan.

Nota pendidikan: Alat keselamatan seperti Xygeni menguatkuasakan kebersihan bersiri secara automatik, membebaskan pembangun untuk memberi tumpuan kepada kod, bukan audit.

Kesimpulan – Perihal Sistem.Teks.Json

Sistem.Teks.Json menjadikan pensiriulan pantas, tetapi kemudahan sering menyembunyikan pendedahan. Pensiriulan system.text.json lalai merangkumi setiap harta awam, yang berpotensi membocorkan data dalaman, token atau pengecam.

Pemaju harus:

  • Audit model mereka.
  • Penggunaan [Abaikan Json] dan selamat PilihanJsonSerializer.
  • Elakkan daripada menyusun semula objek dalaman secara bersiri.
  • Automatikkan pengimbasan menggunakan alat seperti Xygeni Code Security.

Pensiriulan lalai bukan sekadar pintasan pembangun; ia merupakan potensi kebocoran data. Pastikan pensiriulan eksplisit, sahkan output dan automasikan semakan, kerana lalai selamat tidak selalunya selamat.

alat-analisis-komposisi-perisian-alat-sca
Utamakan, pulihkan dan lindungi risiko perisian anda
Dapatkan Akaun Percuma anda.
Tiada kad kredit yang diperlukan.

Lindungi Pembangunan dan Penghantaran Perisian Anda

dengan Suit Produk Xygeni