Set di regole consigliate gestite per codice gestito
È possibile utilizzare il set di regole Regole di Gestione consigliate Microsoft per porre l'attenzione sui problemi più critici del codice gestito, tra cui potenziali problemi di sicurezza, arresti anomali dell'applicazione e altri errori di logica e di progettazione rilevanti.È necessario includere questo set di regole in qualsiasi set di regole personalizzato creato per i progetti.
Regola |
Descrizione |
---|---|
I tipi proprietari di campi Disposable devono essere Disposable |
|
Dichiarare correttamente i gestori eventi |
|
Contrassegnare gli assembly con AssemblyVersionAttribute |
|
I metodi di interfaccia devono essere richiamabili dai tipi figlio |
|
I tipi delle risorse native devono essere Disposable |
|
Spostare i P/Invoke nella classe NativeMethods |
|
Non nascondere i metodi di una classe base |
|
Implementare IDisposable correttamente |
|
Non generare eccezioni in posizioni non previste |
|
Evitare tasti di scelta rapida duplicati |
|
I punti di ingresso P/Invoke devono esistere |
|
I P/Invoke non devono essere visibili |
|
I tipi layout automatici non devono essere visibili a COM |
|
Chiamare GetLastError immediatamente dopo P/Invoke |
|
I tipi di base del tipo visibile a COM devono essere visibili a COM |
|
I metodi di registrazione COM devono corrispondere |
|
Dichiarare correttamente i P/Invoke |
|
Rimuovere i finalizzatori vuoti |
|
I campi dei tipi di valore devono essere portabili |
|
Le dichiarazioni P/Invoke devono essere portabili |
|
Non bloccare oggetti con identità debole |
|
Controllare l'eventuale vulnerabilità di sicurezza delle query SQL |
|
Specificare il marshalling per gli argomenti stringa di P/Invoke |
|
Controllare la sicurezza dichiarativa sui tipi di valori |
|
I puntatori non devono essere visibili |
|
I tipi protetti non devono esporre campi |
|
La sicurezza del metodo deve essere un superset del tipo |
|
I metodi APTCA devono chiamare solo metodi APTCA |
|
I tipi APTCA devono estendere solo tipi di base APTCA |
|
Non esporre in modo indiretto metodi con richieste di collegamento |
|
Le richieste di collegamento negli override devono essere identiche a quelle nei metodi di base |
|
Eseguire il wrapping delle clausole finally vulnerabili in un try esterno |
|
Per le richieste di collegamento dei tipi sono necessarie richieste di ereditarietà |
|
I tipi SecurityCritical non possono partecipare all'equivalenza del tipo |
|
I costruttori predefiniti devono essere Critical almeno come i costruttori predefiniti del tipo base |
|
Delegati devono essere associati ai metodi con trasparenza consistente |
|
I metodi devono conservare trasparenza consistente durante l'override dei metodi base |
|
I metodi Transparent devono contenere solo IL verificabile |
|
I metodi Transparent non devono chiamare i metodi con l'attributo SuppressUnmanagedCodeSecurity |
|
Il codice Transparent non deve far riferimento a elementi SecurityCritical |
|
I metodi Transparent non devono soddisfare i LinkDemand |
|
I tipi devono essere Critical almeno come le interfacce e i tipi base relativi |
|
I metodi Transparent possono non utilizzare asserzioni di sicurezza |
|
I metodi Transparent non devono effettuare chiamate nel codice nativo |
|
Eseguire il rethrow per conservare i dettagli dello stack |
|
Non eliminare oggetti più volte |
|
Inizializzare i campi statici dei tipi di valore inline |
|
Non contrassegnare componenti serviti con WebMethod |
|
I campi Disposable devono essere eliminati |
|
Non chiamare metodi sottoponibili a override nei costruttori |
|
I tipi Disposable devono dichiarare un finalizzatore |
|
I finalizzatori devono chiamare il finalizzatore della classe base |
|
Implementare costruttori di serializzazione |
|
Eseguire l'overload dell'operatore "uguale a" all'override di ValueType.Equals |
|
Contrassegnare i punti di ingresso del Windows Form con STAThread |
|
Contrassegnare tutti i campi non serializzabili |
|
Chiamare metodi della classe base su tipi ISerializable |
|
Contrassegnare i tipi ISerializable con SerializableAttribute |
|
Implementare correttamente i metodi di serializzazione |
|
Implementare ISerializable in modo corretto |
|
Fornire argomenti corretti ai metodi di formattazione |
|
Testare i valori NaN in modo corretto |