Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
| Property | valor |
|---|---|
| ID da regra | CA2326 |
| Título | Não use valores TypeNameHandling diferentes de Nenhum |
| Categoria | Segurança |
| A correção está quebrando ou não quebrando | Sem quebra |
| Habilitado por padrão no .NET 10 | Não |
Motivo
Esta regra é acionada quando uma das seguintes condições é atendida:
- Um valor de enumeração Newtonsoft.Json.TypeNameHandling diferente de
None, é referenciado. - Um valor inteiro que representa um valor diferente de zero é atribuído a uma variável TypeNameHandling .
Descrição da regra
Desserializadores inseguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados para incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados. Um ataque contra um desserializador inseguro pode, por exemplo, executar comandos no sistema operacional subjacente, se comunicar pela rede ou excluir arquivos.
Esta regra localiza valores Newtonsoft.Json.TypeNameHandling diferentes de None. Se você quiser desserializar somente quando um Newtonsoft.Json.Serialization.ISerializationBinder for especificado para restringir tipos desserializados, desative essa regra e habilite as regras CA2327, CA2328, CA2329 e CA2330.
Como corrigir violações
- Use , se possível.
- Torne os dados serializados invioláveis. Após a serialização, assine criptograficamente os dados serializados. Antes da desserialização, valide a assinatura criptográfica. Proteja a chave criptográfica de ser divulgada e projete rotações de chave.
- Restrinja tipos desserializados. Implemente um Newtonsoft.Json.Serialization.ISerializationBinder personalizado. Antes de desserializar com Json.NET, verifique se seu ISerializationBinder personalizado está especificado na propriedade Newtonsoft.Json.JsonSerializerSettings.SerializationBinder. No método Newtonsoft.Json.Serialization.ISerializationBinder.BindToType substituído, se o tipo for inesperado, retorne
nullou lance uma exceção para interromper a desserialização.- Se você restringir tipos desserializados, convém desabilitar essa regra e habilitar as regras CA2327, CA2328, CA2329 e CA2330. As regras CA2327, CA2328, CA2329 e CA2330 ajudam a garantir que você use um ISerializationBinder ao usar valores TypeNameHandling diferentes de .
None
- Se você restringir tipos desserializados, convém desabilitar essa regra e habilitar as regras CA2327, CA2328, CA2329 e CA2330. As regras CA2327, CA2328, CA2329 e CA2330 ajudam a garantir que você use um ISerializationBinder ao usar valores TypeNameHandling diferentes de .
Quando suprimir avisos
É seguro suprimir um aviso desta regra se:
- Você sabe que a entrada é confiável. Considere que o limite de confiança e os fluxos de dados do seu aplicativo podem mudar ao longo do tempo.
- Você tomou uma das precauções em Como corrigir violações.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.
#pragma warning disable CA2326
// The code that's violating the rule is on this line.
#pragma warning restore CA2326
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA2326.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.
Exemplos de pseudocódigo
Violação
using Newtonsoft.Json;
public class ExampleClass
{
public JsonSerializerSettings Settings { get; }
public ExampleClass()
{
Settings = new JsonSerializerSettings();
Settings.TypeNameHandling = TypeNameHandling.All; // CA2326 violation.
}
}
Imports Newtonsoft.Json
Public Class ExampleClass
Public ReadOnly Property Settings() As JsonSerializerSettings
Public Sub New()
Settings = New JsonSerializerSettings()
Settings.TypeNameHandling = TypeNameHandling.All ' CA2326 violation.
End Sub
End Class
Solução
using Newtonsoft.Json;
public class ExampleClass
{
public JsonSerializerSettings Settings { get; }
public ExampleClass()
{
Settings = new JsonSerializerSettings();
// The default value of Settings.TypeNameHandling is TypeNameHandling.None.
}
}
Imports Newtonsoft.Json
Public Class ExampleClass
Public ReadOnly Property Settings() As JsonSerializerSettings
Public Sub New()
Settings = New JsonSerializerSettings()
' The default value of Settings.TypeNameHandling is TypeNameHandling.None.
End Sub
End Class
Regras conexas
CA2327: Não use JsonSerializerSettings inseguro
CA2328: Verifique se JsonSerializerSettings é seguro
CA2329: Não desserializar com JsonSerializer usando uma configuração insegura
CA2330: Certifique-se de que JsonSerializer tenha uma configuração segura ao desserializar