Risiko Bisu ing Serialisasi JSON Teks Sistem Default
Pustaka System.Text.Json wis dadi standar kanggo umume aplikasi .NET modern. Pustaka iki efisien, entheng, lan terintegrasi jero karo ASP.NET Core. Nanging standar sing padha sing ndadekake prasaja uga ngenalake risiko keamanan sing ora katon. Kanthi gawan, serialisasi System.Text.Json kanthi otomatis nggawe serialisasi kabeh properti umum, sanajan sing ngemot data sensitif kaya token utawa pengenal internal. Pengembang asring ngandelake standar iki kanggo kecepatan, nglalekake manawa bisa uga mbukak informasi rahasia ing respon API (jsonserializer).
⚠️Conto ora aman, mung kanggo tujuan pendidikan. Aja digunakake ing produksi.
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..."} Prilaku jsonserializer iki mbabarake Token Sesi amarga kabeh properti umum diserialisasi kanthi otomatis.
Versi aman:
public class UserProfile { public string UserName { get; set; } public string Email { get; set; } [JsonIgnore] // Prevent serialization of sensitive fields public string SessionToken { get; set; } } Cathetan pendidikan: Tansah digunakake [JsonOra Digatekake] kanggo properti sensitif utawa ngrancang DTO kapisah sing mung ngemot kolom sing ditujokake kanggo serialisasi.
Kepiye JsonSerializer Ngembangake Eksposur Tanpa Peringatan
JsonSerializer ing System.Text.Json ora mandheg ing tingkat permukaan. JsonSerializer mlaku kanthi rekursif liwat obyek, koleksi, lan nilai enum sing disarangkan, nggawe serial kabeh sing bisa diakses. Tanpa pengecualian eksplisit, iki bisa kanthi gampang nyebabake kebocoran data bersarang, utamane nalika objek internal ngemot token, pengenal, utawa kunci sesi.
⚠️Conto ora aman, mung kanggo tujuan pendidikan. Aja digunakake ing produksi.
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 sing disarangkan ndadekake serialisasi json teks sistem kalebu sing sensitif Token Akses kanthi otomatis.
Versi aman:
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); Cathetan pendidikan: Tansah nemtokake Pilihan Serializer Json kanthi eksplisit lan deleng jinis data sing disarangkan kanggo paparan data sing ora disengaja.
Dampak Donya Nyata ing API lan Layanan Mikro
Ing aplikasi .NET ing jagad nyata, risiko serialisasi iki asring ora digatekake nganti sawise disebarake. Kombinasi otomatisasi, panggunaan maneh DTO, lan prilaku jsonserializer standar nambah eksposur. Pola umum ing ngendi serialisasi sing ora aman bocor data:
- Nggunakake maneh entitas EF Core langsung ing respon API.
Ngrekam objek serial sing ngemot data otentikasi. - Nuduhake model antarane layanan internal lan publik ing CI/CD pipelines.
⚠️Conto ora aman, mung kanggo tujuan pendidikan. Aja digunakake ing produksi.
// Logs the full object, including sensitive fields _logger.LogInformation("Response: {data}", JsonSerializer.Serialize(result)); yen asil ngandhut SandiHash or Token Sesi, iki saiki disimpen ing CI/CD log, nglanggar prinsip-prinsip hak istimewa paling sithik. Aja tau mbabarake token, kredensial, utawa URL internal sing nyata ing pipelines.
Versi aman:
var options = new JsonSerializerOptions { IgnoreReadOnlyProperties = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull }; // Sanitize before serialization result.SessionToken = null; _logger.LogInformation("Response: {data}", JsonSerializer.Serialize(result, options)); Cathetan pendidikan: Sanitasi utawa batalake kolom sensitif sadurunge nglog, lan tansah gunakake sing aman Pilihan Serializer Json standar kanggo output audit.
Praktik Serialisasi sing Aman kanggo Pengembang
Para pangembang kudune nganggep standar system.text.json minangka lapisan penak, dudu kabijakan keamanan. Serialisasi JSON teks sistem sing aman tegese ngontrol apa sing metu saka aplikasi sampeyan.
Pertahanan Praktis
- Nemtokake kontrak sing eksplisit: Gawe DTO khusus kanggo respon API, aja nggawe serialisasi EF utawa entitas domain kanthi langsung.
- Konfigurasi opsi global: Gunakake JsonSerializerOptions.DefaultAbaikanKondisi lan KebijakanNamaProperti.
- aplikasi [JsonOra Digatekake] utawa konverter: Ndhelikake utawa ngowahi data sensitif.
- Validasi output: Priksa respon serial sing nyata ing tes.
- Otomatisake pamriksan: Kalebu validasi serialisasi ing CI/CD.
Daftar Priksa Pencegahan Mini
- Tinjau kabeh kelas nggunakake serialisasi System.Text.Json
- Tandhani rahasia utawa kredensial nganggo [JsonOra Digatekake]
- Nemtokake standar aman global ing Program.cs or Startup.cs
- Hindari serialisasi langsung ing log
- Kalebu tes paparan serialisasi ing CI/CD pipeline
Cathetan pendidikan: Serialisasi sing aman iku babagan mbatesi paparan, ora nambah kerumitan. Gawe serialisasi dadi eksplisit lan bisa diuji.
Ndeteksi Serialisasi Ora Aman nganggo Pindai Otomatis – System.Text.Json
Pemindaian otomatis ing CI/CD mbantu ndeteksi panggunaan System.Text.Json lan JsonSerializer sing mbebayani. Piranti analisis statis bisa ngenali:
- Model ilang [JsonOra Digatekake].
- Medan sensitif sing kapapar ing DTO.
- Gagal global sing ora aman (contone, ora ana kondisi sing diabaikan).
Conto Pipeline mriksa
# Never expose real tokens, credentials, or internal URLs in pipelines - name: Run serialization security checks run: dotnet xygeni validate --rules serialization --fail-on-risk Cathetan pendidikan: Nggabungake pamriksan statis menyang CI/CD njamin kontrol sing konsisten babagan serialisasi JSON teks sistem ing kabeh versi.
carane Xygeni Code Security Nguatake Keamanan Serialisasi .NET
Xygeni Code Security Nyedhiyakake deteksi jero kanggo standar System.Text.Json sing ora aman lan penyalahgunaan JsonSerializer ing NET.
Iku ngenali pola-pola kaya ta:
- Kolom sensitif diserialisasi kanthi gawan.
- Pencatatan data JSON sing ora aman.
- missing [JsonOra Digatekake] kawicaksanan.
- Opsi serialisasi JSON teks sistem sing salah konfigurasi.
Kanthi nggabungake Xygeni menyang pre-commit hooks, CI/CD pipelines, utawa gerbang PR, sampeyan bisa mblokir pola serialisasi sing rentan sadurunge gabung. Iki nglengkapi proses DevSecOps sing wis ana kanthi ngowahi salah konfigurasi serialisasi dadi kabijakan keamanan sing bisa dileksanakake.
Cathetan edukasi: Piranti keamanan kaya Xygeni ngetrapake kebersihan serialisasi kanthi otomatis, mbebasake para pangembang supaya fokus ing kode, dudu audit.
Dudutan – Babagan System.Text.Json
System.Text.Json nggawe serialisasi cepet, nanging kepraktisan asring ndhelikake paparan. Serialisasi system.text.json standar kalebu saben properti umum, sing bisa uga bocor data internal, token, utawa pengenal.
Para pangembang kudune:
- Audit model-modele.
- Gunakake [JsonOra Digatekake] lan aman Pilihan Serializer Json.
- Aja nggawe serialisasi obyek internal.
- Otomatis mindhai nggunakake piranti kaya Xygeni Code Security.
Serialisasi standar ora mung trabasan pangembang; iki minangka potensi kebocoran data. Gawe serialisasi dadi eksplisit, verifikasi output, lan otomatisake pamriksan, amarga standar sing aman ora mesthi aman.






