Ensemble de règles de règles de vérification étendue pour le code managé
L'ensemble des Règles de vérification étendue Microsoft augmente le nombre d'erreurs d'utilisation d'infrastructure et de logique signalées via l'analyse du code.L'accentuation supplémentaire est placée sur les scénarios spécifiques tels que l'interopérabilité COM et les applications mobiles.Vous devriez envisager d'ajouter cet ensemble de règles si l'un de ces scénarios s'applique à votre projet ou pour trouver d'autres problèmes dans votre projet.
L'ensemble des Règles de vérification étendue Microsoft inclut les règles qui figurent dans les Règles de vérification de base Microsoft.L'ensemble des Règles de vérification de base Microsoft inclut les règles qui figurent dans les Règles Microsoft minimales recommandées.Pour plus d'informations, consultez Ensemble de règles de règles de vérification de base pour le code managé et Ensemble de règles des règles recommandées managées pour le code managé.
Le tableau suivant décrit toutes les règles qui figurent dans l'ensemble des Règles de vérification étendue Microsoft.
Règle |
Description |
---|---|
Les types qui possèdent des champs supprimables doivent être supprimables |
|
Déclarer les gestionnaires d'événements correctement |
|
Marquer les assemblies avec AssemblyVersionAttribute |
|
Les méthodes d'interface doivent pouvoir être appelées par les types enfants |
|
Les types qui possèdent des ressources natives doivent être supprimables |
|
Déplacer les P/Invoke vers une classe NativeMethods |
|
Ne pas masquer les méthodes de la classe de base |
|
Implémenter IDisposable correctement |
|
Ne pas lever d'exceptions dans des emplacements inattendus |
|
Éviter les accélérateurs en double |
|
Des points d'entrée P/Invoke doivent exister |
|
Les P/Invoke ne doivent pas être visibles |
|
Les types auto structurant ne doivent pas être visibles par COM |
|
Appeler GetLastError immédiatement après P/Invoke |
|
Les types de base de type visibles par COM doivent être visibles par COM |
|
Les méthodes d'inscription COM doivent être correspondre |
|
Déclarer correctement les méthodes P/Invoke |
|
Supprimer les finaliseurs vides |
|
Les champs de type valeur doivent être portables |
|
Les déclarations P/Invoke doivent être portables |
|
Ne définissez pas un verrou sur des objets à identité faible |
|
CA2100 : Rechercher des failles de sécurité dans des requêtes SQL |
|
Spécifiez le marshaling pour les arguments de chaîne P/Invoke |
|
Vérifiez la sécurité déclarative dans les types valeur |
|
Les pointeurs ne doivent pas être visibles |
|
Les types sécurisés ne doivent pas exposer de champs |
|
La sécurité de la méthode doit être un sur-ensemble du type |
|
Les méthodes APTCA doivent uniquement appeler des méthodes APTCA |
|
Les types APTCA doivent uniquement étendre des types de base APTCA |
|
N'exposez pas indirectement des méthodes avec des demandes de liaison |
|
Les demandes de liaison de surcharge doivent être identiques au composant de base |
|
Incluez dans un wrapper les clauses finally vulnérables dans un bloc try externe |
|
Les demandes de liaison de types nécessitent des demandes d'héritage |
|
Les types critiques de sécurité ne peuvent pas participer à l'équivalence des types |
|
Les constructeurs par défaut doivent être au moins aussi critiques que les constructeurs par défaut de type de base |
|
Les délégués doivent lier les méthodes avec une transparence cohérente |
|
Les méthodes doivent garder une transparence consistente lors de la surcharge de méthodes de base |
|
Les méthodes transparentes doivent contenir uniquement des IL vérifiables |
|
Les méthodes transparentes ne doivent pas appeler les méthodes ayant l'attribut SuppressUnmanagedCodeSecurity |
|
Le code transparent ne doit pas faire référence à des éléments critiques de sécurité |
|
Les méthodes transparentes ne répondent pas aux LinkDemands |
|
Les types doivent être au moins aussi critiques que les types de base et les interfaces |
|
Les méthodes transparentes ne peuvent pas utiliser d'assertions de sécurité |
|
Les méthodes transparentes ne doivent pas appeler du code natif |
|
Levez à nouveau une exception pour conserver les détails de la pile |
|
Ne pas supprimer des objets plusieurs fois |
|
Initialisez les champs statiques des types valeur sur une ligne |
|
Ne marquez pas les composants pris en charge avec WebMethod |
|
Les champs pouvant être supprimés doivent l'être |
|
N'appelez pas de méthodes substituables dans les constructeurs |
|
Les types pouvant être supprimés doivent déclarer un finaliseur |
|
Les finaliseurs doivent appeler le finaliseur de leur classe de base |
|
Implémentez des constructeurs de sérialisation |
|
Surcharger l'opérateur égal (equals) en remplaçant ValueType.Equals |
|
Marquez les points d'entrée Windows Forms avec STAThread |
|
Marquez tous les champs non sérialisés |
|
Appelez les méthodes de la classe de base sur les types ISerializable |
|
Marquer les types ISerializable avec SerializableAttribute |
|
Implémentez les méthodes de sérialisation comme il se doit |
|
Implémentez correctement ISerializable |
|
Fournissez des arguments corrects aux méthodes de mise en forme |
|
Effectuez correctement des tests NaN |
|
Les enums doivent avoir la valeur zéro |
|
Surchargez l'opérateur égal lors de la surcharge de l'opérateur d'addition et de soustraction |
|
Ne pas transmettre des littéraux en tant que paramètres localisés |
|
Normaliser les chaînes en majuscules |
|
Ne pas ignorer les résultats de méthode |
|
Appeler GC.SuppressFinalize correctement |
|
Les propriétés ne doivent pas retourner des tableaux |
|
Vérifiez la présence de chaînes vides en utilisant la longueur de chaîne |
|
Utiliser uniquement l'API à partir du Framework cible |
|
Supprimez les appels à GC.KeepAlive |
|
Utilisez SafeHandle pour encapsuler les ressources natives |
|
Interceptez les exceptions non CLSCompliant dans les gestionnaires généraux |
|
Ne déclarez pas les types référence mutables en lecture seule |
|
Les champs de tableau ne doivent pas être en lecture seule |
|
Assertions sécurisées |
|
Appelez GC.KeepAlive lorsque vous utilisez des ressources natives |
|
Scellez les méthodes qui satisfont les interfaces privées |
|
Sécurisez les constructeurs de sérialisation |
|
Les constructeurs statiques doivent être privés |
|
Les constantes critiques de sécurité doivent être transparentes |
|
Utilisez des équivalents managés de l'API Win32 |
|
Les méthodes Dispose doivent appeler la fonction Dispose de la classe de base |
|
Les finaliseurs doivent être protégés |
|
Ne réduisez pas la visibilité des membres hérités |
|
Les membres ne doivent pas différer uniquement par leur type de retour |
|
Remplacez Equals au moment de surcharger l'opérateur égal |
|
Les opérateurs doivent contenir des surcharges symétriques |
|
Les propriétés de collection doivent être en lecture seule |
|
Spécifiez des méthodes de désérialisation pour les champs facultatifs |
|
Implémenter des constructeurs d'exception standard |
|
Les paramètres Uri ne doivent pas être des chaînes |
|
Les valeurs de retour Uri ne doivent pas être des chaînes |
|
Les propriétés Uri ne doivent pas être des chaînes |
|
Les surcharges d'uri de chaîne appellent les surcharges de System.Uri |
|
Éviter les surcharges dans les interfaces COM visibles |
|
Éviter les arguments Int64 pour les clients Visual Basic 6 |
|
Éviter les membres statiques dans les types visibles par COM |
|
Ne pas utiliser le paramètre AutoDual ClassInterfaceType |
|
Les types visibles par COM doivent pouvoir être créés |
|
Les méthodes d'inscription COM ne doivent pas être visibles |
|
Marquer les interfaces ComSource comme IDispatch |
|
Éviter les champs non publics dans les types valeur visibles par COM |
|
Marquer les arguments booléens P/Invoke comme MarshalAs |
|
Ne pas utiliser de priorité de processus inactif |
|
Ne pas utiliser de minuteries qui empêchent les changements d'état de l'alimentation |
|
Marquer les assemblies avec NeutralResourcesLanguageAttribute |
|
Évitez d'appeler des méthodes susceptibles de poser des problèmes |
|
Ne traitez pas les fibres comme des threads |
|
Les assemblies de niveau 2 ne doivent pas contenir de LinkDemands |
|
Les membres ne doivent pas avoir d'annotations de transparence conflictuelles |
|
Les méthodes transparentes ne peuvent pas utiliser l'attribut HandleProcessCorruptingExceptions |
|
Le code transparent ne doit pas être protégé avec des LinkDemands |
|
Les méthodes transparentes ne doivent pas utiliser de demandes de sécurité |
|
Le code transparent ne doit pas charger d'assemblies depuis des tableaux d'octets |
|
Les méthodes transparentes ne doivent pas être décorées avec SuppressUnmanagedCodeSecurityAttribute |
|
Les littéraux doivent être correctement orthographiés |
|
Les champs non constants ne doivent pas être visibles |
|
Ne pas marquer les enums avec FlagsAttribute |
|
Surchargez GetHashCode au moment de surcharger Equals |
|
Ne pas lever d'exceptions dans les clauses d'exception |
|
Les surcharges d'opérateur offrent d'autres méthodes nommées |
|
Ne distribuez pas des formats de ressources non commercialisés |
|
Utilisez le mot clé params pour les arguments de variables |
|
Les opérations ne doivent pas déborder |
|
Passez des objets System.Uri à la place de chaînes |
|
Les littéraux de chaîne d'attribut doivent être correctement analysés |