Partilhar via


CA2355: DataSet ou DataTable não seguro em um gráfico de objetos desserializados

Propriedade valor
ID da regra CA2355
Título DataSet ou DataTable não seguros dentro do grafo de objetos desserializado
Categoria Segurança
A correção causa interrupção ou não Ininterrupto
Habilitado por padrão no .NET 10 Não
Línguas aplicáveis C# e Visual Basic

Motivo

Desserialização quando o grafo de objetos do tipo submetido ou especificado pode incluir um DataSet ou DataTable.

Esta regra usa uma abordagem diferente para uma regra semelhante, CA2353: DataSet ou DataTable não seguros num tipo serializável.

O tipo lançado ou especificado é avaliado quando:

Descrição da regra

Ao desserializar entradas não confiáveis com BinaryFormatter e a estrutura de objetos desserializada contém um DataSet ou DataTable, um invasor pode criar um payload malicioso para executar um ataque de negação de serviço. Pode haver vulnerabilidades desconhecidas de execução remota de código.

Para obter mais informações, consulte Diretrizes de segurança DataSet e DataTable.

Como corrigir violações

  • Se possível, use o Entity Framework em vez de DataSet e DataTable.
  • 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 planeje para girações de chave.

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 CA2355
// The code that's violating the rule is on this line.
#pragma warning restore CA2355

Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.

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

Para obter mais informações, consulte Como suprimir avisos de análise de código.

Exemplos de pseudocódigo

Violação

using System.Data;
using System.IO;
using System.Runtime.Serialization;

[Serializable]
public class MyClass
{
    public MyOtherClass OtherClass { get; set; }
}

[Serializable]
public class MyOtherClass
{
    private DataSet myDataSet;
}

public class ExampleClass
{
    public MyClass Deserialize(Stream stream)
    {
        BinaryFormatter bf = new BinaryFormatter();
        return (MyClass) bf.Deserialize(stream);
    }
}

CA2350: Verifique se a entrada de DataTable.ReadXml() é confiável

CA2351: Verifique se a entrada de DataSet.ReadXml() é confiável

CA2352: DataSet ou DataTable não seguros em tipo serializável podem ser vulneráveis a ataques de execução remota de código

CA2353: DataSet ou DataTable inseguro no tipo serializável

CA2354: DataSet ou DataTable não seguros no grafo de objetos desserializado podem ser vulneráveis a ataques de execução remota de código

CA2356: DataSet ou DataTable não seguro no gráfico de objetos desserializados na Web

CA2361: Verifique se a classe gerada automaticamente que contém DataSet.ReadXml() não é usada com dados não confiáveis

CA2362: DataSet ou DataTable inseguros em tipo serializável gerado automaticamente podem ser vulneráveis a ataques de execução remota de código