CA2353: DataSet ou DataTable não seguros no tipo serializável
Property | Valor |
---|---|
ID da regra | CA2353 |
Título | DataSet ou DataTable não seguros no tipo serializável |
Categoria | Segurança |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Não |
Causa
Uma classe ou um struct marcado com um atributo de serialização XML ou um atributo de contrato de dados contém um campo ou propriedade DataSet ou DataTable.
Os atributos de serialização XML incluem:
- XmlAnyAttributeAttribute
- XmlAnyElementAttribute
- XmlArrayAttribute
- XmlArrayItemAttribute
- XmlChoiceIdentifierAttribute
- XmlElementAttribute
- XmlEnumAttribute
- XmlIgnoreAttribute
- XmlIncludeAttribute
- XmlRootAttribute
- XmlTextAttribute
- XmlTypeAttribute
Os atributos de serialização do contrato de dados incluem:
Descrição da regra
Desserialização de uma entrada não confiável, em que o grafo de objetos desserializados contém DataSet ou DataTable e um invasor pode criar um conteúdo mal-intencionado para executar um ataque de negação de serviço. Pode haver vulnerabilidades desconhecidas de execução de código remoto.
Essa regra localiza os tipos que não são seguros quando desserializados. Se o código não desserializar os tipos encontrados, você não terá uma vulnerabilidade de desserialização.
Para obter mais informações, confira Diretrizes de segurança do DataSet e da DataTable.
Como corrigir violações
- Se possível, use o Entity Framework em vez de DataSet e DataTable.
- Torne os dados serializados à prova de adulteração. Após a serialização, assine criptograficamente os dados serializados. Antes da desserialização, valide a assinatura criptográfica. Proteja a chave criptográfica para impedir que ela seja divulgada e projete rotações de chave.
Quando suprimir avisos
É seguro suprimir um aviso dessa regra se:
- O tipo encontrado por essa regra nunca é desserializado, direta ou indiretamente.
- Você sabe 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 CA2353
// The code that's violating the rule is on this line.
#pragma warning restore CA2353
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.CA2353.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Exemplos de pseudocódigo
Violação
using System.Data;
using System.Runtime.Serialization;
[XmlRoot]
public class MyClass
{
public DataSet MyDataSet { get; set; }
}
Regras relacionadas
CA2350: verifique se a entrada do DataTable.ReadXml() é confiável
CA2351: verifique se a entrada do DataSet.ReadXml() é confiável
CA2355: DataSet ou DataTable não seguros no grafo de objetos desserializados
CA2356: DataSet ou DataTable não seguro no grafo de objetos desserializados da Web