Partilhar via


Microsoft mínimo recomendado de conjunto de regras de análise de código de regras

Você pode usar a regra de regras de recomendado Microsoft mínimo definida para focalizar os problemas mais críticos no seu código, incluindo possíveis brechas de segurança, travamentos de aplicativos e outros erros de lógica e de design importantes. Você deve incluir essa regra definida em nenhum conjunto de regras personalizadas que você cria para seus projetos.

Regra

Descrição

CA1001: Os tipos que possuem campos descartáveis devem ser descartáveis

Uma classe declara e implementa um campo de instância é um tipo de System. IDisposable e a classe não implementa IDisposable. Uma classe que declara um campo de IDisposable indiretamente possui um recurso não gerenciado e deve implementar a interface IDisposable.

CA1009: Declarar os manipuladores de eventos corretamente

Métodos de manipulador de eventos utilizam dois parâmetros. A primeira é do tipo Object e é chamada de "remetente". Este é o objeto que disparou o evento. O segundo parâmetro é do tipo System. EventArgs e é denominado "e". Isso é que os dados associados ao evento. Métodos de manipulador de eventos não devem retornar um valor; no C# linguagem de programação, isso é indicado pelo tipo de retorno void.

CA1016: Assemblies de marca com AssemblyVersionAttribute

A.NET Framework usa o número de versão para identificar exclusivamente um assembly e vincular a tipos em assemblies de nome forte. O número de versão é usado em conjunto com a versão e o Editor de diretiva. Por padrão, os aplicativos são executados apenas com a versão do assembly com o qual foram criados.

CA1033: Os métodos de interface devem ser chamados pelos tipos de filho

Um tipo visível externamente sem lacre fornece uma implementação de método explícito de uma interface pública e não fornece um método alternativo de visível externamente com o mesmo nome.

CA1049: Os tipos que possuem recursos nativos devem ser descartáveis

Tipos de alocam recursos não gerenciados devem implementar IDisposable, para permitir que chamadores para liberar esses recursos sob demanda e reduzir os tempos de vida dos objetos mantendo os recursos.

CA1060: Mover P/Invokes NativeMethods classe

Métodos de invocação de plataforma, tais como aqueles marcados com o atributo. DllImportAttribute ou métodos definidos usando a palavra-chave de declarar em Visual Basic, acessar código não gerenciado. Esses métodos devem ser da classe NativeMethods, SafeNativeMethods ou UnsafeNativeMethods.

CA1061: Não ocultar métodos da classe base

Um método em um tipo base está oculta por um método com nomes idênticos em um tipo derivado, quando a assinatura de parâmetro do método derivado difere somente pelos tipos que são mais rigidez derivado do que os tipos correspondentes na assinatura do parâmetro do método base.

CA1063: Implementar IDisposable corretamente

Todos os tipos de IDisposable devem implementar corretamente o padrão Dispose.

CA1065: Não aumente exceções em locais inesperados

Um método que não é esperado para lançar exceções lança uma exceção.

CA1301: Evite aceleradores duplicados

Uma tecla de acesso, também conhecido como um acelerador permite o acesso do teclado para um controle usando a tecla ALT. Quando vários controles têm teclas de acesso duplicados, o comportamento da tecla de acesso não é bem definido.

CA1400: Os pontos de entrada de P/Invoke devem existir.

Um método público ou protegido é marcado com o atributo. DllImportAttribute. A biblioteca não gerenciada não pôde ser localizada, ou o método não pôde ser correspondido para uma função na biblioteca.

CA1401: P/Invokes não deverá ser visível

Um método público ou protegido em um tipo público tem o atributo. DllImportAttribute (também é implementado da palavra-chave de declarar em Visual Basic). Esses métodos não devem ser expostos.

CA1403: Tipos de layout automático não devem ser visível em COM

Um tipo de valor visível em COM é marcado com o atributo System.Runtime.InteropServices.StructLayoutAttribute definido como LayoutKind.Auto. O layout desses tipos pode alterar entre versões do.NET Framework, o que interromperá a clientes COM que esperam um layout específico.

CA1404: Chamar GetLastError imediatamente após P/Invoke.

É feita uma chamada para o método de Marshal.GetLastWin32Error ou a função do Win32 GetLastError equivalente, e a chamada imediatamente anterior não é uma plataforma de invocação de método.

CA1405: Tipos base do tipo visível COM devem estar visível em COM

Um visível em COM tipo deriva de um tipo que não é visível para COM.

CA1410: Métodos de registro COM devem ser correspondidos.

Um tipo declara um método marcado com o atributo System.Runtime.InteropServices.ComRegisterFunctionAttribute, mas não declara um método marcado com o atributo System.Runtime.InteropServices.ComUnregisterFunctionAttribute, ou vice-versa.

CA1415: Declarar P/Invokes corretamente

Esta regra procurará as declarações de método que funções do Win32 de destino que possuem um ponteiro para um OVERLAPPED estruturar o parâmetro de invocação de plataforma e o parâmetro gerenciado correspondente não é um ponteiro para uma estrutura de System.Threading.NativeOverlapped.

CA1900: Campos do tipo de valor devem ser portátil

Esta regra verifica se declarado com layout explícito de estruturas alinhará corretamente quando empacotado para código não gerenciado em sistemas operacionais de 64 bits.

CA1901: Declarações P/Invoke devem ser portátil

Esta regra avalia o tamanho de cada parâmetro e o valor de retorno de um P/Invoke e verifica se o seu tamanho está correto quando empacotado para código não gerenciado em sistemas operacionais de 32 bits e 64 bits.

CA2000: Descartar objetos antes de perder escopo

Porque um evento excepcional pode ocorrer que impedirá o finalizador de um objeto seja executado, o objeto deve ser explicitamente destruído antes de todas as referências a ele estão fora do escopo.

CA2002: Não bloquear em objetos de identidade fraco

Um objeto deve ter uma identidade fraca quando ele pode ser acessado diretamente nos limites do domínio de aplicativo. Um segmento que tenta adquirir um bloqueio em um objeto que tem uma identidade fraca pode ser bloqueado por um segundo thread em um domínio de aplicativo diferente que tenha um bloqueio no mesmo objeto.

CA2100: Analisar consultas SQL vulnerabilidades de segurança

Um método define a propriedade de System.Data.IDbCommand.CommandText usando uma seqüência de caracteres que é criada a partir de um argumento de seqüência de caracteres para o método. Esta regra pressupõe que o argumento de seqüência de caracteres contém a entrada do usuário. Uma seqüência de caracteres de comando SQL criada a partir da entrada do usuário é vulnerável a ataques de injeção de SQL.

CA2101: Especifique o empacotamento para argumentos de seqüência de caracteres de P/Invoke.

Uma plataforma chamar membros permite chamadores parcialmente confiáveis, tem um parâmetro de seqüência de caracteres e não é explicitamente empacotar a seqüência de caracteres. Isso pode causar uma vulnerabilidade de segurança potencial.

CA2108: Revisão de segurança declarativos sobre tipos de valor

Um tipo de valor público ou protegido é protegido pelas demandas de Link ou de acesso a dados.

CA2111: Ponteiros não deverá ser visíveis

Um ponteiro não é particular, interno ou somente leitura. Código mal-intencionado pode alterar o valor do ponteiro, potencialmente permitindo o acesso a locais arbitrários na memória ou causando falhas de aplicativo ou sistema.

CA2112: Tipos protegidos não devem expor campos

Um tipo de público ou protegido contém campos públicos e é protegido pelas demandas de Link. Se o código possui acesso a uma instância de um tipo que é protegido por uma demanda de link, não tem o código atender à demanda de link para acessar os campos do tipo.

CA2114: A segurança do método deve ser um superconjunto do tipo

Um método não deve ter o nível de método e o tipo de nível de segurança declarativa para a mesma ação.

CA2116: Métodos APTCA só deverá chamar métodos APTCA

Quando o atributo APTCA (AllowPartiallyTrustedCallers) está presente em um assembly totalmente confiável e o assembly executa o código em outro conjunto que não permite chamadores parcialmente confiáveis, é possível a uma exploração de segurança.

CA2117: Tipos APTCA só devem estender tipos básicos de APTCA

Quando o atributo APTCA (AllowPartiallyTrustedCallers) está presente em um assembly totalmente confiável e um tipo no assembly herda a partir de um tipo que não permite chamadores parcialmente confiáveis, é possível a uma exploração de segurança.

CA2122: Não exponha indiretamente métodos com demandas de link

Um membro público ou protegido com demandas de Link e é chamado por um membro que não executa quaisquer verificações de segurança. Uma demanda de link verifica as permissões do chamador imediato.

CA2123: Demandas de link de substituição devem ser idênticas a base

Esta regra corresponde a um método para o método base, que é uma interface ou um método virtual em outro tipo e então compara as demandas de link em cada um. Se esta regra for violada, um calle134r mal-intencionados podem ignorar a demanda de link simplesmente chamando o método não seguro.

CA2124: Quebrar vulnerável finalmente tente cláusulas no exterior

Um método público ou protegido contém um bloco try/finally. O finalmente bloco é exibido redefinir o estado de segurança e não o próprio está contido em um bloco finally.

CA2126: As demandas de link do tipo exigem demandas de herança

Um tipo de público sem lacre é protegido com uma demanda de link e tem um método substituível. O tipo nem o método é protegido com uma demanda de herança.

CA2131: Tipos importantes de segurança não podem participar de equivalência de tipo

Participe de um tipo de equivalência de tipo e o próprio, tipo ou um membro ou campo do tipo, é marcado, usando o atributo SecurityCriticalAttribute. Essa regra ocorre em qualquer críticos tipos ou tipos que contêm métodos críticos ou campos que estão participando da equivalência de tipo. Quando o CLR detecta desse tipo, ele não carregá-lo com um TypeLoadException em tempo de execução. Normalmente, essa regra é disparada somente quando os usuários a implementar equivalência de tipo manualmente em vez de em por contar com tlbimp e os compiladores para fazer a equivalência do tipo.

CA2132: Construtores padrão devem ser pelo menos tão importantes como construtores do tipo base padrão

Tipos e membros que possuem o SecurityCriticalAttribute não podem ser usados pelo código de aplicativo do Silverlight. Membros e tipos de segurança crítica podem ser usados somente pelo código confiável na .NET Framework para a biblioteca de classe do Silverlight. Porque uma construção pública ou protegida em uma classe derivada deve ter a transparência igual ou maior que sua classe base, uma classe em um aplicativo não pode ser derivada de uma classe marcada como SecurityCritical.

CA2133: Delegados devem ligar para métodos com transparência consistente

Esse aviso é gerado em um método que vincula a um delegado que está marcado como usando o SecurityCriticalAttribute para um método que é transparente ou que esteja marcado, usando o SecuritySafeCriticalAttribute. O aviso também é disparado em um método que vincula a um delegado que é transparente ou crítico de seguro para um método critical.

CA2134: Métodos devem manter a transparência consistente quando os métodos base

Essa regra é disparada quando um método marcado usando o SecurityCriticalAttribute substitui um método que é transparente ou marcadas usando o SecuritySafeCriticalAttribute. A regra também é disparada quando um método que é transparente ou marcadas usando o SecuritySafeCriticalAttribute substitui um método que é marcado por meio de um SecurityCriticalAttribute. A regra é aplicada ao substituir uma virtual método ou a implementação de uma interface.

CA2137: Métodos transparentes devem conter apenas o IL verificável

Um método contém código ou retorna um tipo por referência. Essa regra é gerada em tentativas pelo código transparent de segurança para executar não verificável idioma intermediário microsoft (MISL). No entanto, a regra não contém um verificador de IL completo e em vez disso, usa heurística para detectar a maioria das violações de verificação de MSIL.

CA2138: Métodos transparentes não devem chamar métodos com o atributo SuppressUnmanagedCodeSecurity

Um método de segurança transparente chama um método que está marcado como usando o atributo SuppressUnmanagedCodeSecurityAttribute.

CA2141: métodos transparentes não devem atender a LinkDemands

Um método de segurança transparente chama um método em um assembly que não está marcado como usando o APTCA, ou um método de segurança transparente satisfaz um LinkDemand para um tipo ou um método.

CA2146: Os tipos devem ser pelo menos, tão importantes quanto seus tipos base e interfaces

Um método de segurança transparente chama um método em um assembly que não está marcado como usando o APTCA, ou um método de segurança transparente satisfaz um LinkDemand para um tipo ou um método.

CA2147: Métodos transparentes não podem usar a segurança asserts

Código que está marcado como SecurityTransparentAttribute não é concedido permissões suficientes para declarar.

CA2149: Métodos transparentes não devem chamar código nativo

Essa regra é gerada em qualquer método transparente que chama diretamente no código nativo (por exemplo, por meio de P/Invoke). Violações desta regra causar um MethodAccessException no modelo de transparência de nível 2 e uma demanda completa para UnmanagedCode no modelo de transparência de nível 1.

CA2200: Relançar para preservar os detalhes de pilha

Uma exceção é relançada e a exceção é explicitamente especificada na instrução throw. Se uma exceção é re-thrown, especificando a exceção na instrução throw, a lista de chamadas de método entre o método original que lançou a exceção e o método atual é perdida.

CA2202: Não Dispor objetos várias vezes

Uma implementação do método contém caminhos de código que poderiam causar várias chamadas para System.IDisposable.Dispose ou um equivalente de Dispose (como um método Close () em alguns tipos) no mesmo objeto.

CA2207: Inicializar o tipo de valor campos estáticos in-line

Um tipo de valor declara um construtor estático explícito. Para corrigir uma violação desta regra, inicializar todos os dados estáticos quando ela é declarada e remover o construtor estático.

CA2212: Não marca componentes atendidos com WebMethod

Um método em um tipo que herda de System.EnterpriseServices.ServicedComponent é marcado com System.Web.Services.WebMethodAttribute. Como WebMethodAttribute e um método de ServicedComponent têm comportamento conflitante e requisitos de fluxo de contexto e a transação, o comportamento do método estarão incorreto em alguns cenários.

CA2213: Campos descartáveis devem ser descartados.

Um tipo que implementa o System. IDisposable declara os campos que são de tipos também implementam IDisposable. O método Dispose do campo não é chamado pelo método Dispose do tipo declarativo.

CA2214: Não chame os métodos overridable construtores

Quando um construtor chama um método virtual, é possível que o construtor para a instância que invoca o método não foi executado.

CA2216: Tipos descartáveis devem declarar o finalizador

Um tipo que implementa o System. IDisposable e possui campos que sugerem o uso de recursos não gerenciados, não implementar um finalizador, conforme descrito pelo Object.Finalize.

CA2220: Os finalizadores devem chamar o finalizador da classe base

Finalização deve ser propagada por meio da hierarquia de herança. Para garantir isso, tipos devem chamar o método Finalize de classe base no seu próprio método Finalize.

CA2229: Implementar os construtores de serialização

Para corrigir uma violação desta regra, implemente o construtor de serialização. Para uma classe selada, tornar o construtor particular; Caso contrário, tornam protegido.

CA2232: Pontos de entrada da marca Windows Forms com STAThread

STAThreadAttribute indica que o COM o modelo para o aplicativo de threading é um single-threaded apartment. Este atributo deve estar presente no ponto de entrada de qualquer aplicativo que usa o Windows Forms; Se for omitido, os componentes do Windows podem não funcionar corretamente.

CA2235: Marcar todos os campos não serializáveis

Um campo de instância de um tipo que não é serializável é declarado em um tipo que pode ser serializado.

CA2236: Chamar métodos da classe base nos tipos de ISerializable

Para corrigir uma violação desta regra, chama o construtor de método ou a serialização de GetObjectData do tipo base do construtor ou método correspondente do tipo derivado.

CA2237: Tipos de ISerializable de marca com o SerializableAttribute

Sejam reconhecidos pelo common language runtime como serializável, os tipos devem ser marcados com o atributo SerializableAttribute mesmo se o tipo usa uma rotina de serialização personalizada por meio da implementação da interface ISerializable.

CA2238: Implementar métodos de serialização corretamente

Um método que manipula o evento de serialização não tem a assinatura correta, retornar o tipo ou a visibilidade.

CA2240: Implementa ISerializable corretamente

Para corrigir uma violação desta regra, faça o método GetObjectData visíveis e substituível e certifique-se de que todos os campos de instância são incluídos no processo de serialização ou explicitamente marcados com o atributo NonSerializedAttribute.

CA2241: Fornecer argumentos corretos para métodos de formatação.

O argumento de formato passado para o System.String.Format não contém um item de formato que corresponde ao argumento de cada objeto, ou vice-versa.

CA2242: Testar NaN corretamente

Essa expressão testa um valor em relação a Single.Nan ou Double.Nan. Use Single.IsNan(Single) ou Double.IsNan(Double) para testar o valor.