Share via


CA2326: Não usar valores de TypeNameHandling diferentes de None

Property Valor
ID da regra CA2326
Título Não usar valores de TypeNameHandling diferentes de None
Categoria Segurança
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Não

Causa

Essa regra será acionada quando uma das seguintes condições for atendida:

Descrição da regra

Desserializadores não seguros são vulneráveis ao desserializar dados não confiáveis. Um invasor pode modificar os dados serializados visando incluir tipos inesperados para injetar objetos com efeitos colaterais mal-intencionados. Um ataque contra um desserializador não seguro poderia, por exemplo, executar comandos no sistema operacional subjacente, realizar comunicações pela rede ou excluir arquivos.

Essa 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, desabilite essa regra e, em vez dela, habilite as regras CA2327, CA2328, CA2329 e CA2330.

Como corrigir violações

Quando suprimir avisos

É seguro suprimir um aviso dessa regra se:

  • Você souber que a entrada é confiável. Considere que o limite de confiança do seu aplicativo e os fluxos de dados podem ser alterados ao longo do tempo.
  • Você tiver tomado uma das precauções descritas em Como corrigir violações.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar 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 em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA2326.severity = none

Para obter mais informações, confira 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

CA2327: Não usar JsonSerializerSettings não seguras

CA2328: Verificar se as JsonSerializerSettings são seguras

CA2329: Não desserializar com JsonSerializer usando uma configuração não segura

CA2330: Verificar se o JsonSerializer tem uma configuração segura durante a desserialização