CA2353: DataSet ou DataTable não seguro no tipo serializável
Propriedade | valor |
---|---|
ID da regra | CA2353 |
Cargo | DataSet ou DataTable não seguro em tipo serializável |
Categoria | Segurança |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Não |
Causa
Uma classe ou struct marcada com um atributo de serialização XML ou um atributo de contrato de dados contém um DataSet campo ou DataTable propriedade.
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
Ao desserializar a entrada não confiável e o gráfico de objeto desserializado contiver um ou DataTable, um invasor pode criar uma carga mal-intencionada para executar um DataSet ataque de negação de serviço. Pode haver vulnerabilidades desconhecidas de execução remota de código.
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 CA2353
// The code that's violating the rule is on this line.
#pragma warning restore CA2353
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA2353.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.Runtime.Serialization;
[XmlRoot]
public class MyClass
{
public DataSet MyDataSet { get; set; }
}
Regras conexas
CA2350: Verifique se a entrada de DataTable.ReadXml() é confiável
CA2351: Verifique se a entrada de DataSet.ReadXml() é confiável
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