Conjunto de regra de análise de código de regras de segurança da Microsoft

Você deve incluir a regra de regras de segurança da Microsoft definida para maximizar o número de possíveis problemas de segurança que são relatadas.

Regra

Descriçã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.

CA2105: Campos de matriz não devem ser lidos apenas

Quando você aplica o modificador de read-only (somente leitura em Visual Basic) a um campo que contém uma matriz, o campo não pode ser alterado para fazer referência a uma matriz diferente. No entanto, os elementos da matriz armazenada em um campo somente leitura podem ser alterados.

CA2210: Assemblies devem ter nomes de alta seguras válidos

O nome forte protege clientes de inadvertidamente carregar um assembly que foi violado. Os assemblies sem nomes de alta segurança não devem ser implantados fora cenários muito limitados. Se você compartilhar ou distribuir assemblies não assinados corretamente, o assembly pode ser violado, o common language runtime não pode carregar o assembly ou o usuário pode ter que desativar a verificação no seu computador.

CA2115: Chame GC.Ao usar os recursos nativos de KeepAlive

Essa regra detecta erros que podem ocorrer devido um recurso não gerenciado está sendo finalizado enquanto ainda estiver sendo usado no código não gerenciado.

CA2102: Catch não CLSCompliant exceções nos manipuladores gerais

Um membro em um assembly que não está marcado com o RuntimeCompatibilityAttribute ou está marcado como RuntimeCompatibility(WrapNonExceptionThrows = false) contém um bloco catch que manipula Exception e não contém um bloco catch geral de imediatamente a seguir.

CA2104: Não declarar os tipos de referência mutáveis somente leitura

Um tipo visível externamente contém um campo visível externamente de somente leitura que é um tipo de referência mutáveis. Um tipo de mutável é um tipo de dados cujos instância podem ser modificados.

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.

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.

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 chamador mal intencionado pode ignorar a demanda de link simplesmente chamando o método não seguro.

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.

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.

CA2107: Revisão negar e permitir o uso de apenas

Usando o PermitOnly método e ações de segurança de CodeAccessPermission.Deny devem ser usadas somente por aqueles com conhecimento avançado dos.NET Framework security. Código que usa essas ações de segurança deve passar por uma revisão de segurança.

CA2103: Revisão de segurança imperativa

Um método usa segurança imperativa e pode construir a permissão usando valores de retorno ou de informações de estado que podem ser alterado enquanto a demanda está ativa. Use a segurança declarativa, sempre que possível.

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.

CA2118: Revise o uso de SuppressUnmanagedCodeSecurityAttribute

SuppressUnmanagedCodeSecurityAttribute altera o comportamento do sistema de segurança padrão para membros que executar o código não gerenciado que usa invocação de plataforma ou de interoperabilidade COM. Esse atributo é usado principalmente para aumentar o desempenho; No entanto, o desempenho ganha vêm com consideráveis riscos à segurança.

CA2109: Revise os manipuladores de eventos visíveis

Um método de manipulação de eventos do público ou protegido foi detectado. Métodos de manipulação de eventos não devem ser expostos a menos que absolutamente necessário.

CA2119: Lacrar métodos que satisfaçam às interfaces privadas

Um tipo de público herdável fornece uma implementação do método substituível de uma interface interna do (amigo em Visual Basic). Para corrigir uma violação desta regra, impedir que o método seja substituído fora do assembly.

CA2106: Declarações de seguro

Um método declara que uma permissão e verificações de segurança não são executadas no chamador. Declarar uma permissão de segurança sem executar qualquer verificações de segurança podem deixar uma fraqueza de segurança pode ser explorada em seu código.

CA2120: Proteger os construtores de serialização

Esse tipo tem um construtor que leva a um objeto de System.Runtime.Serialization.SerializationInfo e um objeto de System.Runtime.Serialization.StreamingContext (a assinatura do construtor de serialização). Este construtor não é protegido por uma verificação de segurança, mas um ou mais dos construtores regulares no tipo estão protegidos.

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.

CA2136: Os membros não devem ter anotações conflitantes de transparência

O código Critical não pode ocorrer em um assembly transparente para 100%. Esta regra analisa os assemblies de 100% transparentes para quaisquer anotações SecurityCritical no tipo, no campo e no método.

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

Esta regra analisa todos os métodos e tipos em um assembly que é um dos 100% transparente ou misto transparente/crítica e sinaliza qualquer uso declarativo ou imperativo de Assert.

CA2140: Código Transparent não deve fazer referência a itens essenciais de segurança

Métodos marcados com SecurityTransparentAttribute chamam membros não públicos que são marcados como SecurityCritical. Esta regra analisa todos os métodos e tipos em um assembly que é misto crítica transparente e sinaliza qualquer chamadas de código transparente para o código critical não públicos não marcados como SecurityTreatAsSafe.

CA2121: Construtores estáticos devem ser particulares

O sistema chama o construtor estático antes da primeira instância do tipo é criada ou quaisquer membros estáticos são referenciados. Se um construtor estático não é particular, pode ser chamado pelo código diferente do sistema. Dependendo das operações são executadas no construtor, isso pode causar um comportamento inesperado.

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.

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.