Ensemble de règles d'analyse du code Règles de sécurité Microsoft

Vous devez inclure l'ensemble de Règles de sécurité Microsoft pour optimiser le nombre de problèmes de sécurité éventuels qui sont détectés.

Règle

Description

CA2116 : Les méthodes APTCA doivent uniquement appeler des méthodes APTCA

Lorsque l'attribut APTCA (AllowPartiallyTrustedCallers) est présent sur un assembly doté d'une confiance totale, et lorsque cet assembly exécute un code dans un autre assembly qui n'autorise pas les appelants dotés d'une confiance partielle, il devient possible d'exploiter une faille dans la sécurité.

CA2117 : Les types APTCA doivent uniquement étendre des types de base APTCA

Lorsque l'attribut APTCA (AllowPartiallyTrustedCallers) est présent sur un assembly doté d'une confiance totale et lorsqu'un type présent dans l'assembly hérite d'un type qui n'autorise pas les appelants partiellement approuvés, une exploitation de la sécurité devient possible.

CA2105 : Les champs de tableau ne doivent pas être en lecture seule

Lorsque vous appliquez le modificateur en lecture seule (ReadOnly en Visual Basic) à un champ qui contient un tableau, ce champ ne peut pas être modifié pour référencer un tableau différent. Toutefois, les éléments du tableau stockés dans un champ en lecture seule peuvent être modifiés.

CA2210 : Les assemblys doivent porter des noms forts valides

Le nom fort protège les clients du chargement à leur insu d'un assembly falsifié. Les assemblys sans noms forts ne doivent pas être déployés hors de scénarios très limités. Si vous partagez ou distribuez des assemblys qui ne sont pas signés correctement, ceux-ci peuvent être falsifiés, le Common Language Runtime peut ne pas les charger ou l'utilisateur peut être amené à désactiver une vérification sur son ordinateur.

CA2115 : Appelez GC.KeepAlive lorsque vous utilisez des ressources natives

Cette règle détecte les erreurs susceptibles de se produire du fait qu'une ressource non managée est en cours de finalisation alors qu'elle est encore utilisée dans un code non managé.

CA2102 : Interceptez les exceptions non CLSCompliant dans les gestionnaires généraux

Un membre dans un assembly qui n'est pas marqué avec RuntimeCompatibilityAttribute ou qui est marqué avec RuntimeCompatibility(WrapNonExceptionThrows = false) contient un bloc catch qui gère System.Exception et ne contient pas de bloc catch général immédiatement après.

CA2104 : Ne déclarez pas les types référence mutables en lecture seule

Un type visible de l'extérieur contient un champ en lecture seule visible de l'extérieur qui constitue un type référence mutable. Un type mutable est un type dont les données d'instance peuvent être modifiées.

CA2122 : N'exposez pas indirectement des méthodes avec des demandes de liaison

Un membre public ou protégé a des demandes de liaison et est appelé par un membre qui ne procède à aucune vérification de la sécurité. Une demande de liaison vérifie uniquement les autorisations de l'appelant immédiat.

CA2114 :La sécurité de la méthode doit être un sur-ensemble du type

Pour une même action, une méthode ne doit pas présenter de sécurité déclarative à la fois au niveau méthode et au niveau type.

CA2123 : Les demandes de liaison de substitution doivent être identiques au composant de base

Cette règle met en correspondance une méthode et sa méthode de base, qui est soit une interface, soit une méthode virtuelle dans un autre type, puis compare les demandes de liaison sur chacune. Si cette règle est violée, un appelant malveillant peut ignorer la demande de liaison simplement en appelant la méthode non protégée.

CA2111 : Les pointeurs ne doivent pas être visibles

Un pointeur n'est ni privé, ni interne ni en lecture seule. Un code malveillant peut modifier la valeur du pointeur, autorisant potentiellement l'accès aux emplacements arbitraires en mémoire ou provoquant des défaillances des applications ou du système.

CA2108 : Vérifiez la sécurité déclarative dans les types valeur

Un type valeur public ou protégé est sécurisé par l'accès aux données ou des demandes de liaison.

CA2107 : Passez en revue l'utilisation des méthodes Deny et PermitOnly

La méthode PermitOnly et les actions de sécurité CodeAccessPermission.Deny doivent être uniquement utilisées par les développeurs ayant des connaissances approfondies de la sécurité du .NET Framework. Le code qui utilise ces actions de sécurité doit subir une révision de sécurité.

CA2103 : Vérifiez la sécurité impérative

Une méthode utilise la sécurité impérative et est susceptible de construire l'autorisation à l'aide d'informations d'état ou de valeurs de retour qui peuvent changer pendant que la demande est active. Utilisez la sécurité de déclaration dès que possible.

CA2100 : Rechercher des failles de sécurité dans des requêtes SQL

Une méthode définit la propriété System.Data.IDbCommand.CommandText à l'aide d'une chaîne générée à partir d'un argument de chaîne à la méthode. Cette règle suppose que l'argument de chaîne contient des entrées d'utilisateur. Une chaîne de commande SQL construite à partir d'entrées d'utilisateur est vulnérable aux attaques d'injection SQL.

CA2118 : Révision de l'utilisation de SuppressUnmanagedCodeSecurityAttribute

SuppressUnmanagedCodeSecurityAttribute modifie le comportement par défaut du système en matière de sécurité pour les membres qui exécutent le code non managé utilisant COM Interop ou l'appel de code non managé. Cet attribut est essentiellement utilisé pour accroître les performances ; toutefois, les gains de performance s'accompagnent de risques substantiels pour la sécurité.

CA2109 : Passez en revue les gestionnaires d'événements visibles

Une méthode de gestion d'événements publique ou protégée a été détectée. Les méthodes de gestion d'événements ne doivent pas être exposées sauf nécessité absolue.

CA2119 : Scellez les méthodes qui satisfont les interfaces privées

Un type public pouvant être hérité fournit une implémentation de méthode substituable d'une interface interne (Friend en Visual Basic). Pour corriger une violation de cette règle, empêchez la méthode d'être substituée en dehors de l'assembly.

CA2106 : Assertions sécurisées

Une méthode déclare une autorisation et aucune vérification de sécurité n'est exécutée sur l'appelant. L'assertion d'une autorisation de sécurité effectuée sans vérification de sécurité peut rendre votre code vulnérable et facile à exploiter.

CA2120 : Sécurisez les constructeurs de sérialisation

Ce type possède un constructeur qui accepte un objet System.Runtime.Serialization.SerializationInfo et un objet System.Runtime.Serialization.StreamingContext (la signature du constructeur de sérialisation). Ce constructeur n'est pas sécurisé par une vérification de la sécurité, mais au moins un des constructeurs normaux dans le type est sécurisé.

CA2112 : Les types sécurisés ne doivent pas exposer de champs

Un type public ou protégé contient des champs publics et est sécurisé par des demandes de liaison. Si un code a accès à une instance d'un type sécurisé par une demande de liaison, ce code n'a pas besoin de satisfaire la demande de liaison pour accéder aux champs du type.

CA2136 : Les membres ne doivent pas avoir d'annotations de transparence conflictuelles

Le code critique ne peut pas apparaître dans un assembly entièrement transparent. Cette règle analyse les assemblys entièrement transparents pour toutes les annotations SecurityCritical au niveau du type, du champ et de la méthode.

CA2147 : Les méthodes transparentes ne peuvent pas utiliser d'assertions de sécurité

Cette règle analyse toutes les méthodes et tous les types dans un assembly qui est entièrement transparent ou mi-transparent et mi-critique, et elle signale toutes les utilisations déclaratives ou impératives d'Assert.

CA2140 : Le code transparent ne doit pas faire référence à des éléments critiques de sécurité

Les méthodes marquées avec SecurityTransparentAttribute appellent des membres non publics marqués en tant que SecurityCritical. Cette règle analyse toutes les méthodes et tous les types dans un assembly qui est mi-transparent et mi-critique, et elle signale tous les appels du code transparent au code critique non public qui ne sont pas marqués comme SecurityTreatAsSafe.

CA2121 : Les constructeurs statiques doivent être privés

Le système appelle le constructeur statique avant la création de la première instance du type ou le référencement de tout membre statique. Si un constructeur statique n'est pas privé, il peut être appelé par un code autre que le système. Selon les opérations effectuées dans le constructeur, cette possibilité peut provoquer un comportement inattendu.

CA2126 : Les demandes de liaison de types nécessitent des demandes d'héritage

Un type unsealed public est protégé par une demande de liaison et a une méthode substituable. Ni le type ni la méthode n'est protégé par une demande d'héritage.

CA2124 : Incluez dans un wrapper les clauses finally vulnérables dans un bloc try externe

Une méthode publique ou protégée contient un bloc try/finally. Le bloc finally semble réinitialiser l'état de sécurité et n'est lui-même placé dans aucun bloc finally.