system.text.json - jsonserializer - serialização JSON de texto do sistema

Valores padrão do System.Text.Json no .NET: Quando a conveniência abre espaço para a exposição de dados

Riscos silenciosos na serialização JSON de texto do sistema padrão

A biblioteca System.Text.Json tornou-se o padrão para a maioria das aplicações .NET modernas. Ela é eficiente, leve e profundamente integrada ao ASP.NET Core. Mas os mesmos padrões que a tornam simples também introduzem riscos de segurança silenciosos. Por padrão, a serialização do System.Text.Json serializa automaticamente todas as propriedades públicas, mesmo aquelas que contêm dados sensíveis, como tokens ou identificadores internos. Os desenvolvedores costumam confiar nesses padrões para obter velocidade, ignorando que podem expor informações confidenciais nas respostas da API (jsonserializer). 

⚠️Exemplo inseguro, apenas para fins educacionais. Não utilize em produção.

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

				
			

Esse comportamento do jsonserializer expõe Token de Sessão Porque todas as propriedades públicas são serializadas automaticamente.

Versão segura:

				
					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 educacional: Sempre use [JsonIgnorar] Para propriedades sensíveis ou para criar DTOs separados que contenham apenas os campos destinados à serialização.

Como o JsonSerializer expande a exposição sem aviso prévio

O JsonSerializer em System.Text.Json não para no nível superficial. Ele percorre recursivamente objetos aninhados, coleções e valores de enumeração, serializando tudo o que consegue acessar. Sem uma exclusão explícita, isso pode facilmente levar a vazamentos de dados aninhados, especialmente quando objetos internos contêm tokens, identificadores ou chaves de sessão.

⚠️Exemplo inseguro, apenas para fins educacionais. Não utilize em produção.

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

				
			

O objeto aninhado faz com que a serialização JSON do texto do sistema inclua informações sensíveis. Token de acesso automaticamente.

Versão segura:

				
					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 educacional: Defina sempre Opções do Serializador JSON Analise explicitamente e revise os tipos aninhados para detectar exposição não intencional de dados.

Impacto no mundo real em APIs e microsserviços

Em aplicações .NET do mundo real, esses riscos de serialização muitas vezes passam despercebidos até depois da implantação. A combinação de automação, reutilização de DTOs e o comportamento padrão do jsonserializer amplifica a exposição. Padrões comuns em que a serialização insegura causa vazamento de dados:

  • Reutilizando entidades do EF Core diretamente em respostas de API.
    Registro de objetos serializados que contêm dados de autenticação.
  • Compartilhamento de modelos entre serviços internos e públicos em CI/CD pipelines.

⚠️Exemplo inseguro, apenas para fins educacionais. Não utilize em produção.

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

				
			

Se o resultar contém Hash da Senha or Token de Sessão, estes agora estão armazenados em CI/CD registros, violando Princípios do menor privilégio. Nunca exponha tokens reais, credenciais ou URLs internas em pipelines.

Versão segura:

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

				
			

Nota educacional: Higienize ou anule campos sensíveis antes de fazer Conecte-se e sempre use métodos seguros. Opções do Serializador JSON Valores padrão para saída de auditoria.

Práticas seguras de serialização para desenvolvedores

Os desenvolvedores devem tratar os valores padrão de system.text.json como uma camada de conveniência, não como uma política de segurança. A serialização JSON segura de texto do sistema significa ter controle sobre o que sai do seu aplicativo.

Defesas práticas

  1. Defina contratos explícitos: Crie DTOs dedicados para respostas de API; nunca serialize entidades do Entity Framework ou de domínio diretamente.
  2. Configurar opções globais: Uso JsonSerializerOptions.DefaultIgnoreCondition e Política de Nomenclatura de Imóveis.
  3. Inscreva-se [JsonIgnorar] ou conversores: Ocultar ou transformar dados sensíveis.
  4. Validar resultados: Inspecione as respostas serializadas reais nos testes.
  5. Automatizar verificações: Inclua a validação de serialização em CI/CD.

Lista de verificação preventiva simplificada

  • Analise todas as classes usando a serialização System.Text.Json.
  • Marque segredos ou credenciais com [JsonIgnorar]
  • Defina valores padrão seguros globais em Programa.cs or Inicialização.cs
  • Evite a serialização direta em logs.
  • Inclua testes de exposição à serialização em seu CI/CD pipeline

Nota educacional: A serialização segura visa limitar a exposição, não adicionar complexidade. Torne a serialização explícita e testável.

Detecção de serialização insegura com varredura automatizada – System.Text.Json

Digitalização automatizada em CI/CD Ajuda a detectar o uso arriscado de System.Text.Json e JsonSerializer. Ferramentas de análise estática podem identificar:

  • Modelos ausentes [JsonIgnorar].
  • Campos sensíveis expostos em DTOs.
  • Valores padrão globais inseguros (por exemplo, falta de condições a serem ignoradas).

Exemplo Pipeline Verifique

				
					# 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 educacional: Integração verificações estáticas em sua CI/CD Garante o controle consistente da serialização JSON do texto do sistema em todas as compilações.

 

Como Xygeni Segurança de Código Reforça a segurança da serialização do .NET

Xygeni Segurança de Código Fornece detecção profunda para valores padrão inseguros do System.Text.Json e uso indevido do JsonSerializer no .NET.

Ele identifica padrões como:

  • Os campos sensíveis são serializados por padrão.
  • Registro inseguro de dados JSON.
  • Desaparecido [JsonIgnorar] atributos.
  • Opções de serialização JSON de texto do sistema mal configuradas.

Integrando Xygeni para dentro pre-commit hooks, CI/CD pipelineCom os gates PR, você pode bloquear padrões de serialização vulneráveis ​​antes que eles sejam mesclados. Ele complementa seu processo DevSecOps existente, transformando erros de configuração de serialização em políticas de segurança aplicáveis.

Nota educativa: Ferramentas de segurança como o Xygeni aplicam automaticamente práticas de serialização adequadas. Liberando os desenvolvedores para que se concentrem no código, e não em auditorias.

Conclusão – Sobre Sistema.Texto.Json

Sistema.Texto.Json A serialização é rápida, mas essa conveniência muitas vezes esconde vulnerabilidades. A serialização padrão do system.text.json inclui todas as propriedades públicas, podendo vazar dados internos, tokens ou identificadores.

Os desenvolvedores devem:

  • Analise os seus modelos.
  • Uso [JsonIgnorar] e seguro Opções do Serializador JSON.
  • Evite serializar objetos internos.
  • Automatize a digitalização usando ferramentas como Xygeni Segurança de Código.

A serialização padrão não é apenas um atalho para desenvolvedores; é uma potencial fonte de vazamento de dados. Torne a serialização explícita, verifique as saídas e automatize as verificações, pois padrões seguros nem sempre são seguros.

sca-tools-software-composição-análise-ferramentas
Priorize, corrija e proteja seus riscos de software
Crie sua conta gratuita.
Nenhum cartão de crédito é necessário.

Garanta o desenvolvimento e a entrega do seu software.

com o Suíte de Produtos da Xygeni