Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
| 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:
- Inicializando um DataContractSerializer objeto
- Inicializando um DataContractJsonSerializer objeto
- Inicializando um XmlSerializer objeto
- Invocando JavaScriptSerializer.Deserialize
- Invocando JavaScriptSerializer.DeserializeObject
- Invocando XmlSerializer.FromTypes
- Invocando Newtonsoft Json.NET JsonSerializer.Deserialize
- Invocando Newtonsoft Json.NET JsonConvert.DeserializeObject
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);
}
}
Regras conexas
CA2350: Verifique se a entrada de DataTable.ReadXml() é confiável
CA2351: Verifique se a entrada de DataSet.ReadXml() é confiável
CA2353: DataSet ou DataTable inseguro no tipo serializável
CA2356: DataSet ou DataTable não seguro no gráfico de objetos desserializados na Web