Partilhar via


CA2326: Não use valores TypeNameHandling diferentes de Nenhum

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 9 Não

Motivo

Esta regra é acionada quando uma das seguintes condições é atendida:

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

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

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