Set di regole base di correttezza per codice gestito
Il set di regole base di correttezza riguarda gli errori comuni e di logica che si commettono utilizzando le API del framework.Il set di regole base di correttezza include le regole contenute nel set Regole minime consigliate.Per ulteriori informazioni, vedere Set di regole consigliate gestite per codice gestito Includere questo set di regole per estendere l'elenco degli avvisi segnalati dalle regole minime consigliate.
Nella tabella seguente vengono descritte tutte le regole del set di regole base di correttezza Microsoft.
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 di stringa 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 non possono 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 |
|
Gli enum devono avere valore zero |
|
Eseguire l'overload dell'operatore "uguale a" all'overload degli operatori di addizione e sottrazione |
|
Non passare valori letterali come parametri localizzati |
|
Normalizzare le stringhe in lettere maiuscole |
|
Non ignorare i risultati dei metodi |
|
Chiamare GC.SuppressFinalize correttamente |
|
Le proprietà non devono restituire matrici |
|
Testare le stringhe vuote utilizzando la lunghezza di stringa |
|
Utilizzare solo API della versione di .NET Framework di destinazione |
|
Rimuovere le chiamate a GC.KeepAlive |
|
Utilizzare SafeHandle per incapsulare le risorse native |
|
Individuare le eccezioni non CLSCompliant nei gestori generali |
|
Non dichiarare tipi di riferimento modificabili in sola lettura |
|
I campi di matrici non devono essere in sola lettura |
|
Asserzioni protette |
|
Chiamare GC.KeepAlive durante l'utilizzo di risorse native |
|
Impostare come sealed i metodi che soddisfano interfacce private |
|
Proteggere i costruttori di serializzazione |
|
I costruttori statici devono essere privati |
|
Le costanti SecurityCritical devono essere Transparent |
|
Utilizzare equivalenti gestiti dell'API Win32 |
|
I metodi Dispose devono chiamare il metodo Dispose della classe base |
|
I finalizzatori devono essere protetti |
|
Non diminuire la visibilità di membri ereditati |
|
La differenza tra membri non deve limitarsi al tipo restituito |
|
Eseguire l'override di Equals all'override dell'operatore |
|
Gli operatori devono avere overload simmetrici |
|
Le proprietà di raccolta devono essere in sola lettura |
|
Fornire metodi di deserializzazione per i campi facoltativi |