Ensemble de règles des règles recommandées managées pour le code managé
Vous pouvez utiliser l'ensemble de Règles Microsoft Managées Recommandées pour vous concentrer sur les problèmes les plus critiques dans votre code managé, notamment les failles de sécurité potentielles, les arrêts brutaux d'application, et d'autres erreurs importantes de logique et de conception.Vous devez inclure cet ensemble de règles dans tout ensemble de règles personnalisées que vous créez pour vos projets.
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/Invokes 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 devraient exister |
|
Les P/Invokes ne devraient pas être visibles |
|
Les types auto-structurants ne devraient pas être visibles par COM |
|
Appeler GetLastError immédiatement après P/Invoke |
|
Les types de base de type visibles par COM devraient être visibles par COM |
|
Les méthodes d'inscription COM devraient correspondre |
|
Déclarer correctement les méthodes P/Invokes |
|
Supprimer les finaliseurs vides |
|
Les champs de type valeur doivent être portables |
|
Les déclarations P/Invokes doivent être portables |
|
Ne définissez pas un verrou sur des objets à identité faible |
|
Rechercher des failles de sécurité dans les 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 devraient pas être visibles |
|
Les types sécurisés ne devraient 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é peuvent ne 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 consistante lors de la surcharge des 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 doivent pas répondre aux LinkDemands |
|
Les types doivent être au moins aussi critiques que les types de base et les interfaces |
|
Les méthodes transparentes peuvent ne 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 devraient déclarer un finaliseur |
|
Les finaliseurs devraient appeler le finaliseur de leur classe de base |
|
Implémentez des constructeurs de sérialisation |
|
Surcharger l'opérateur égal (equals) en surchargeant ValueType.Equals |
|
Marquez les points d'entrée Windows Forms avec STAThread |
|
Marquez tous les champs non sérialisables |
|
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 correctement |
|
Implémentez correctement ISerializable |
|
Fournissez des arguments corrects aux méthodes de mise en forme |
|
Effectuez correctement des tests NaN |