system.text.json - jsonserializer - жүйелік мәтіннің json сериялануы

.NET жүйесіндегі System.Text.Json әдепкі параметрлері: Convenience деректер экспозициясын ашқан кезде

Әдепкі жүйелік мәтін JSON серияландыруындағы үнсіз тәуекелдер

System.Text.Json кітапханасы көптеген заманауи .NET қолданбалары үшін әдепкі болып табылады. Ол тиімді, жеңіл және ASP.NET Core-ға терең интеграцияланған. Бірақ оны қарапайым ететін сол әдепкі параметрлер үнсіз қауіпсіздік тәуекелдерін де тудырады. Әдепкі бойынша, System.Text.Json сериялау барлық жалпыға қолжетімді қасиеттерді, тіпті токендер немесе ішкі идентификаторлар сияқты құпия деректерді сақтайтындарды да автоматты түрде сериялайды. Әзірлеушілер көбінесе жылдамдық үшін осы әдепкі параметрлерге сүйенеді, API жауаптарында (jsonserializer) құпия ақпаратты ашуы мүмкін екенін ескермейді. 

⚠️Қауіпсіз емес мысал, тек білім беру мақсатында. Өндірісте пайдаланбаңыз.

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

Бұл jsonserializer әрекеті көрсетеді SessionToken себебі барлық жалпы сипаттар автоматты түрде серияланады.

Қауіпсіз нұсқасы:

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

Білім беру туралы ескертпе: Әрқашан қолданыңыз [JsonIgnore] сезімтал қасиеттер үшін немесе тек сериялауға арналған өрістерді қамтитын бөлек DTO-ларды жобалау үшін.

JsonSerializer ескертусіз экспозицияны қалай кеңейтеді

System.Text.Json ішіндегі JsonSerializer беткі деңгейде тоқтамайды. Ол рекурсивті түрде кірістірілген нысандар, жиынтықтар және enum мәндері арқылы өтіп, қол жеткізе алатын барлық нәрсені сериялайды. Анық алып тастаусыз, бұл, әсіресе ішкі нысандарда токендер, идентификаторлар немесе сеанс кілттері болған кезде, деректердің ішкі ағып кетуіне оңай әкелуі мүмкін.

⚠️Қауіпсіз емес мысал, тек білім беру мақсатында. Өндірісте пайдаланбаңыз.

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

Кірістірілген нысан жүйелік мәтіннің json сериялануына сезімталдықты қосады AccessToken автоматты түрде.

Қауіпсіз нұсқасы:

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

Білім беру туралы ескертпе: Әрқашан анықтаңыз JsonSerializerOptions жоспарланбаған деректердің ашылуы үшін кірістірілген түрлерін нақты қарап шығыңыз.

API және микросервистерге нақты әлемдегі әсер

Нақты әлемдегі .NET қолданбаларында бұл серияландыру тәуекелдері көбінесе орналастырудан кейін байқалмайды. Автоматтандыру, DTO қайта пайдалану және әдепкі jsonserializer әрекетінің үйлесімі экспозицияны күшейтеді. Қауіпсіз емес сериялау деректердің ағып кетуінің жиі кездесетін үлгілері:

  • EF Core нысандарын API жауаптарында тікелей қайта пайдалану.
    Аутентификация деректерін қамтитын серияланған нысандарды тіркеу.
  • Ішкі және мемлекеттік қызметтер арасында модельдерді бөлісу CI/CD pipelines.

⚠️Қауіпсіз емес мысал, тек білім беру мақсатында. Өндірісте пайдаланбаңыз.

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

егер нәтиже құрамында бар Құпия сөз хэші or SessionToken, бұлар қазір сақталған CI/CD журналдар, бұзу ең аз артықшылық қағидаттары. Нақты токендерді, тіркелгі деректерін немесе ішкі URL мекенжайларын ешқашан көрсетпеңіз pipelines.

Қауіпсіз нұсқасы:

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

Білім беру туралы ескертпе: Журналға жазу алдында құпия өрістерді зарарсыздандырыңыз немесе жойыңыз және әрқашан қауіпсіз пайдаланыңыз JsonSerializerOptions аудит шығысы үшін әдепкі мәндер.

Әзірлеушілер үшін қауіпсіз сериялау тәжірибелері

Әзірлеушілер system.text.json әдепкі параметрлерін қауіпсіздік саясаты емес, ыңғайлылық деңгейі ретінде қарастыруы керек. Қауіпсіз жүйелік мәтін JSON серияландыруы қолданбаңыздан не шығатынын бақылауды алуды білдіреді.

Практикалық қорғаныс шаралары

  1. Нақты келісімшарттарды анықтаңыз: API жауаптары үшін арнайы DTO жасаңыз, EF немесе домен нысандарын тікелей серияламаңыз.
  2. Әлемдік параметрлерді конфигурациялау: пайдалану JsonSerializerOptions.ӘдепкіIgnoreCondition және Мүлікті атау саясаты.
  3. Қолдану [JsonIgnore] немесе түрлендіргіштер: Құпия деректерді жасыру немесе түрлендіру.
  4. Шығыстарды тексеру: Тесттердегі нақты серияланған жауаптарды тексеріңіз.
  5. Тексерулерді автоматтандыру: Серияландыруды тексеруді қосыңыз CI/CD.

Шағын алдын алу тізімі

  • System.Text.Json серияландыруын пайдаланып барлық кластарды қарап шығыңыз
  • Құпияларды немесе сенімхаттарды белгілеңіз [JsonIgnore]
  • Жаһандық қауіпсіз әдепкі параметрлерді анықтаңыз Program.cs or Startup.cs
  • Журналдарда тікелей сериялаудан аулақ болыңыз
  • Серияландыру экспозиция сынақтарын қосыңыз CI/CD pipeline

Білім беру туралы ескертпе: Қауіпсіз сериализациялау күрделілікті арттыру емес, экспозицияны шектеу туралы. Сериализациялауды анық және тексерілетін етіп жасаңыз.

Автоматтандырылған сканерлеу арқылы қауіпсіз емес серияландыруды анықтау – System.Text.Json

Автоматтандырылған сканерлеу CI/CD System.Text.Json және JsonSerializer бағдарламаларын қауіпті пайдалануды анықтауға көмектеседі. Статикалық талдау құралдары мыналарды анықтай алады:

  • Модельдер жоқ [JsonIgnore].
  • DTO-ларда сезімтал өрістер ашылды.
  • Қауіпсіз емес жаһандық әдепкі мәндер (мысалы, елемеу шарттарының болмауы).

мысал Pipeline тексеру

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

Білім беру туралы ескертпе: Біріктіру статикалық тексерулер сіздің CI/CD барлық құрастырмаларда жүйелік мәтіннің JSON сериялануын біркелкі басқаруды қамтамасыз етеді.

 

Қалай Xygeni Code Security .NET сериализация қауіпсіздігін күшейтеді

Ксигени Code Security NET жүйесіндегі қауіпті System.Text.Json әдепкі параметрлерін және JsonSerializer бағдарламасын дұрыс пайдаланбауды терең анықтауды қамтамасыз етеді.

Ол келесідей үлгілерді анықтайды:

  • Сезімтал өрістер әдепкі бойынша серияланады.
  • JSON деректерін қауіпсіз емес тіркеу.
  • Жоқ [JsonIgnore] атрибуттар.
  • Жүйелік мәтіннің JSON сериялау опциялары дұрыс конфигурацияланбаған.

Біріктіру арқылы Ксигени ішіне pre-commit hooks, CI/CD pipelines немесе PR қақпалары арқылы осал сериялау үлгілерін біріктірмес бұрын бұғаттауға болады. Бұл сериялаудың қате конфигурацияларын орындалатын қауіпсіздік саясаттарына айналдыру арқылы сіздің бар DevSecOps процесін толықтырады.

Оқулық ескертпесі: Xygeni сияқты қауіпсіздік құралдары сериялау гигиенасын автоматты түрде қамтамасыз етеді, әзірлеушілерге аудитке емес, кодқа назар аударуға мүмкіндік береді.

Қорытынды – Туралы System.Text.Json

System.Text.Json Серияландыруды жылдам етеді, бірақ ыңғайлылық көбінесе экспозицияны жасырады. Әдепкі system.text.json серияландыруы барлық жалпыға қолжетімді қасиеттерді қамтиды, бұл ішкі деректердің, токендердің немесе идентификаторлардың ағып кетуіне әкелуі мүмкін.

Әзірлеушілер келесі әрекеттерді орындауы керек:

  • Олардың модельдерін аудиторлық тексеруден өткізіңіз.
  • пайдалану [JsonIgnore] және қауіпсіз JsonSerializerOptions.
  • Ішкі нысандарды сериялаудан аулақ болыңыз.
  • сияқты құралдарды пайдаланып сканерлеуді автоматтандыру Xygeni Code Security.

Әдепкі сериялау тек әзірлеушінің қысқа жолы ғана емес; бұл деректердің ағып кетуі мүмкін. Сериялауды анық етіп, шығыстарды тексеріп, тексерулерді автоматтандырыңыз, себебі қауіпсіз әдепкі параметрлер әрқашан қауіпсіз бола бермейді.

sca-құралдары-бағдарламалық жасақтама-композиция-талдау-құралдары
Бағдарламалық жасақтама тәуекелдеріне басымдық беріңіз, оларды жойыңыз және қауіпсіз етіңіз
Тегін аккаунтыңызды алыңыз.
Несие картасы қажет емес.

Бағдарламалық жасақтаманы әзірлеу және жеткізуді қауіпсіз етіңіз

Xygeni өнім жиынтығымен бірге