Partilhar via


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

Property valor
ID da regra CA2362
Título DataSet ou DataTable não seguros no tipo serializável gerado automaticamente podem ser vulneráveis a ataques de execução remota de código
Categoria Segurança
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 9 Não

Motivo

Uma classe ou struct marcada com SerializableAttribute contém um DataSet campo ou propriedade e DataTable tem um DesignerCategoryAttributearquivo .

CA2352 é uma regra semelhante, para quando não há um DesignerCategoryAttribute.

Descrição da regra

Ao desserializar entradas não confiáveis com BinaryFormatter e o gráfico de objeto desserializado contém um DataSet ou DataTable, um invasor pode criar uma carga mal-intencionada para executar um ataque de execução remota de código.

Esta regra é como CA2352, mas para código gerado automaticamente para uma representação na memória de dados dentro de um aplicativo GUI. Normalmente, essas classes geradas automaticamente não são desserializadas de entradas não confiáveis. O uso do seu aplicativo pode variar.

Esta regra localiza tipos que são inseguros quando desserializados. Se o seu código não desserializar os tipos encontrados, então você não tem uma vulnerabilidade de desserialização.

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 projete rotações de chave.

Quando suprimir avisos

É seguro suprimir um aviso desta regra se:

  • O tipo encontrado por esta regra nunca é desserializado, direta ou indiretamente.
  • 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 CA2362
// The code that's violating the rule is on this line.
#pragma warning restore CA2362

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

[*.{cs,vb}]
dotnet_diagnostic.CA2362.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.Xml.Serialization;

namespace ExampleNamespace
{
    [global::System.CodeDom.Compiler.GeneratedCode(""System.Data.Design.TypedDataSetGenerator"", ""2.0.0.0"")]
    [global::System.Serializable()]
    [global::System.ComponentModel.DesignerCategoryAttribute(""code"")]
    [global::System.ComponentModel.ToolboxItem(true)]
    [global::System.Xml.Serialization.XmlSchemaProviderAttribute(""GetTypedDataSetSchema"")]
    [global::System.Xml.Serialization.XmlRootAttribute(""Package"")]
    [global::System.ComponentModel.Design.HelpKeywordAttribute(""vs.data.DataSet"")]
    public class ExampleClass : global::System.Data.DataSet {
        private DataTable table;
    }
}

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 não seguro no tipo serializável

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

CA2355: DataSet ou DataTable não seguro no gráfico de objeto desserializado

CA2356: DataSet ou DataTable não seguro no gráfico de objeto desserializado da Web

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