Considerazioni sulla sicurezza: Controlli di Microsoft Windows

In questo argomento vengono fornite informazioni sulle considerazioni sulla sicurezza relative ai controlli di Windows. Le informazioni contenute in questo argomento non forniscono tutte le informazioni necessarie per conoscere i problemi di sicurezza, usarle come punto di partenza e riferimento per questa area tecnologica.

L'interconnettività tra i computer è comune; Il principale problema di uno sviluppatore deve essere la sicurezza delle applicazioni. Le sezioni seguenti illustrano alcuni potenziali problemi di sicurezza da considerare durante la programmazione dei controlli Windows.

Messaggi di controllo con terminazione Null

Molti dei messaggi di controllo e delle macro hanno parametri stringa. Spesso questi messaggi non convalidano le stringhe di input, in particolare, non verificano la presenza di una terminazione '\0'. Quando si chiama un messaggio che usa una stringa come parametro, specificare in modo esplicito che la stringa è con terminazione Null.

Uso di stringhe

Quando si programmano i controlli Windows, è necessario modificare le stringhe. Quasi ogni controllo richiede l'inserimento di testo. Ad esempio, per popolare una casella di riepilogo è necessario caricare le stringhe nel controllo . Poiché l'uso di stringhe spesso causa un sovraccarico del buffer, adottare precauzioni per evitare questo rischio di sicurezza.

Per altre informazioni sui sovraccarichi del buffer, vedere Scrittura di codice sicuro di Michael Howard e David LeBlanc, Microsoft Press, 2002 e Procedure consigliate per le API Sicurezza.

Convalida dell'input

I messaggi di controllo seguenti possono presentare problemi di sicurezza.

Se il testo cambia tra la chiamata per ottenere la lunghezza del testo e l'ora di visualizzazione o utilizzo del testo, può verificarsi un sovraccarico del buffer. Per evitare questo problema, è necessario convalidare la stringa prima di usarla. Inoltre, i messaggi che recuperano testo, CB_GETLBTEXT, TB_GETBUTTONTEXT e TTM_GETTEXT, non hanno alcun parametro di dimensione del buffer che presenta il potenziale per un sovraccarico del buffer.

Quando si usano CB_GETLBTEXT o SB_GETTEXT, è necessario chiamare prima CB_GETLBTEXTLEN o SB_GETTEXTLENGTH per ottenere le dimensioni del buffer. Alcuni di questi messaggi, TB_GETBUTTONTEXT, LVM_GETIedizione Standard ARCHSTRING e TVM_GETIedizione Standard ARCHSTRING, possono essere chiamati con un valore di parametro NULL per ottenere la lunghezza della stringa prima di richiamare il messaggio per recuperare la stringa.

Un messaggio a cui prestare particolare attenzione è la barra di stato SB_GETTIPTEXT messaggio. Questo messaggio non consente di eseguire query sulla lunghezza della stringa da recuperare.

Utilizzo password

Se si usano controlli di modifica protetti da password (ES_PASSWORD stile), il buffer che contiene il testo recuperato deve essere impostato su zero il prima possibile per evitare di esporre la password dell'utente in memoria.

Avvisi di sicurezza

Nella tabella seguente sono elencate le funzionalità che, se usate in modo non corretto, possono compromettere la sicurezza delle applicazioni. I messaggi elencati qui non forniscono un parametro che specifica le dimensioni del buffer.

Funzionalità Mitigazione
DlgDirListComboBox Assicurarsi che il buffer usato dalla funzione possa essere scritto in e che sia con terminazione Null.
CB_GETLBTEXT Chiamare CB_GETLBTEXTLEN per ottenere le dimensioni del buffer e quindi chiamare CB_GETLBTEXT per recuperare la stringa.
LVM_GETIedizione Standard ARCHSTRING Chiamare il messaggio con un valore di parametro NULL per ottenere le dimensioni del buffer e quindi chiamare il messaggio una seconda volta per recuperare la stringa.
SB_GETTEXT Chiamare SB_GETTEXTLENGTH per ottenere le dimensioni del buffer e quindi chiamare SB_GETTEXT per recuperare la stringa.
TB_GETBUTTONTEXT Chiamare il messaggio con un valore di parametro NULL per ottenere le dimensioni del buffer e quindi chiamare il messaggio una seconda volta per recuperare la stringa.
TTM_GETTEXT Questo messaggio non consente di conoscere o specificare le dimensioni del buffer.
TVM_GETIedizione Standard ARCHSTRING Chiamare il messaggio passando un valore di parametro NULL per ottenere le dimensioni del buffer e quindi chiamare il messaggio una seconda volta per recuperare la stringa.

 

Altre risorse

Microsoft Security

Sicurezza

Microsoft Security Response Center

Procedure consigliate per i API Sicurezza