Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Molte funzioni CRT precedenti hanno versioni più sicure e recenti. Se esiste una funzione sicura, la versione meno sicura precedente viene contrassegnata come deprecata. La nuova versione ha il _s
suffisso ("secure").
In questo contesto, "deprecato" significa che l'uso della funzione non è consigliato. Non significa che la funzione verrà rimossa da CRT.
Le funzioni sicure non impediscono o correggeno gli errori di sicurezza. Rilevano invece gli errori quando si verificano. Eseguono controlli aggiuntivi per verificare le condizioni di errore. Se si verifica un errore, richiamano un gestore errori (vedere Convalida dei parametri).
Ad esempio, la strcpy
funzione non è in grado di stabilire se la stringa copiata è troppo grande per il buffer di destinazione. La controparte sicura, strcpy_s
, accetta le dimensioni del buffer come parametro. Può quindi determinare se si verificherà un sovraccarico del buffer. Se si usa strcpy_s
per copiare 11 caratteri in un buffer di 10 caratteri, si tratta di un errore da parte dell'utente. strcpy_s
Non è possibile correggere l'errore. Ma può rilevare l'errore e informare l'utente richiamando il gestore di parametri non validi.
Eliminazione degli avvisi di deprecazione
Esistono diversi modi per eliminare gli avvisi di deprecazione per le funzioni precedenti, meno sicure. Il più semplice consiste semplicemente nel definire _CRT_SECURE_NO_WARNINGS
o usare il warning
pragma. Disabilita gli avvisi di deprecazione, ma i problemi di sicurezza che hanno causato gli avvisi esistono ancora. È preferibile lasciare abilitati gli avvisi di deprecazione e sfruttare le nuove funzionalità di sicurezza CRT.
In C++, il modo più semplice per eliminare gli avvisi di deprecazione consiste nell'usare overload di modelli sicuri. I sovraccarichi eliminano gli avvisi di deprecazione in molti casi. Sostituiscono le chiamate alle funzioni deprecate con chiamate per proteggere le versioni delle funzioni. Ad esempio, considerate la chiamata deprecata a strcpy
:
char szBuf[10];
strcpy(szBuf, "test"); // warning: deprecated
Definendo _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES
come 1, viene eliminato l'avviso modificando la chiamata strcpy
a strcpy_s
, che evita sovraccarichi del buffer. Per altre informazioni, vedere Proteggere gli overload dei modelli.
Per queste funzioni deprecate senza sovraccarichi dei template sicuri, dovresti assolutamente considerare di aggiornare manualmente il codice per utilizzare le versioni sicure.
Un'altra origine degli avvisi di deprecazione, indipendente dalla sicurezza, sono le funzioni POSIX. Sostituire i nomi delle funzioni POSIX con i relativi equivalenti standard (ad esempio, modificare access
in _access
), o disabilitare gli avvisi di deprecazione correlati a POSIX definendo _CRT_NONSTDC_NO_WARNINGS
. Per altre informazioni, vedere Compatibility.
Altre funzionalità di sicurezza
Alcune delle funzionalità di sicurezza includono:
Convalida dei parametri
Funzioni sicure e molte delle relative controparti non sicure, convalidano i parametri. La convalida può includere:
- Controllo dei
NULL
valori. - Verifica dei valori enumerati per la validità.
- Verifica che i valori integrali siano in intervalli validi.
Per altre informazioni, vedere Convalida dei parametri.
Un gestore per i parametri non validi è accessibile anche allo sviluppatore. Quando una funzione rileva un parametro non valido, anziché asserire e uscire dall'applicazione, CRT consente di controllare questi problemi tramite
_set_invalid_parameter_handler
o_set_thread_local_invalid_parameter_handler
.- Controllo dei
Buffer ridimensionati
È necessario passare le dimensioni del buffer a qualsiasi funzione sicura che scrive in un buffer. Le versioni sicure convalidano che il buffer sia sufficientemente grande prima di scrivervi. La convalida consente di evitare errori pericolosi di sovraccarico del buffer che potrebbero consentire l'esecuzione di codice dannoso. Queste funzioni in genere restituiscono un
errno
codice di errore e richiamano il gestore di parametri non validi se le dimensioni del buffer sono troppo piccole. Le funzioni che leggono da buffer di input, comegets
, dispongono di versioni sicure che richiedono di specificare una dimensione massima.Le versioni di debug di alcune funzioni CRT avanzate per la sicurezza riempiono il buffer passato con un carattere speciale (0xFE). Questo carattere di riempimento aiuta a individuare i casi in cui è stata fornita una dimensione errata alla funzione. Purtroppo, riduce anche le prestazioni. Per migliorare le prestazioni, usare
_CrtSetDebugFillThreshold
per disabilitare il riempimento del buffer. Per altre informazioni e un elenco di funzioni con questo comportamento, vedere_CrtSetDebugFillThreshold
.Terminazione Null
Alcune funzioni che hanno lasciato stringhe potenzialmente non terminate hanno versioni sicure, assicurando che le stringhe vengano terminate correttamente con null.
Segnalazione errori avanzata
Le funzioni sicure restituiscono codici di errore con più informazioni sugli errori rispetto a quelle disponibili con le funzioni preesistenti. Le funzioni sicure e molte delle funzioni preesistenti ora impostano
errno
e spesso restituiscono anche un codice di tipoerrno
, per fornire una segnalazione degli errori migliore.Sicurezza del file system
Le API di I/O di file sicuri supportano l'accesso sicuro ai file nel caso predefinito.
Sicurezza di Windows
Le API di processo sicuro rafforzano i criteri di sicurezza e consentono agli ACL di essere specificati.
Controllo della sintassi della stringa di formato
Vengono rilevate stringhe non valide, ad esempio quando si usano caratteri di campo di tipo non corretti nelle
printf
stringhe di formato.
Vedi anche
Convalida dei parametri
Sovraccarichi sicuri di modelli
File Libreria di Runtime C (CRT) e Libreria Standard C++ (STL) .lib