CA2361: Verifique se a classe gerada automaticamente que contém DataSet.ReadXml() não é usada com dados não confiáveis
Propriedade | valor |
---|---|
ID da regra | CA2361 |
Cargo | Verifique se a classe gerada automaticamente que contém DataSet.ReadXml() não é usada com dados não confiáveis |
Categoria | Segurança |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Não |
Causa
O DataSet.ReadXml método foi chamado ou referenciado e está dentro do código gerado automaticamente.
Esta regra classifica o código gerado automaticamente b:
- Estar dentro de um método chamado
ReadXmlSerializable
. - O
ReadXmlSerializable
método tem um System.Diagnostics.DebuggerNonUserCodeAttributearquivo . - O
ReadXmlSerializable
método está dentro de um tipo que tem um System.ComponentModel.DesignerCategoryAttributearquivo .
CA2351 é uma regra semelhante, para quando DataSet.ReadXml aparece dentro de código não gerado automaticamente.
Descrição da regra
Ao desserializar uma entrada não confiável, um invasor pode criar uma DataSet entrada mal-intencionada para executar um ataque de negação de serviço. Pode haver vulnerabilidades desconhecidas de execução remota de código.
Esta regra é como CA2351, 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.
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 do DataSet.
- 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:
- 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 CA2361
// The code that's violating the rule is on this line.
#pragma warning restore CA2361
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA2361.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.
Exemplos de pseudocódigo
Violação
namespace ExampleNamespace
{
/// <summary>
///Represents a strongly typed in-memory cache of data.
///</summary>
[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 partial class Something : global::System.Data.DataSet {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
protected override void ReadXmlSerializable(global::System.Xml.XmlReader reader) {
if ((this.DetermineSchemaSerializationMode(reader) == global::System.Data.SchemaSerializationMode.IncludeSchema)) {
this.Reset();
global::System.Data.DataSet ds = new global::System.Data.DataSet();
ds.ReadXml(reader);
if ((ds.Tables["Something"] != null)) {
base.Tables.Add(new SomethingTable(ds.Tables["Something"]));
}
this.DataSetName = ds.DataSetName;
this.Prefix = ds.Prefix;
this.Namespace = ds.Namespace;
this.Locale = ds.Locale;
this.CaseSensitive = ds.CaseSensitive;
this.EnforceConstraints = ds.EnforceConstraints;
this.Merge(ds, false, global::System.Data.MissingSchemaAction.Add);
this.InitVars();
}
else {
this.ReadXml(reader);
this.InitVars();
}
}
}
}
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 não seguro no tipo serializá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