Funzionalità di sicurezza in CRT

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. Entrambi disabilitano 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. Gli overload eliminano gli avvisi di deprecazione in molti casi. Sostituiscono le chiamate alle funzioni deprecate con chiamate per proteggere le versioni delle funzioni. Ad esempio, considerare 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 overload dei modelli sicuri, è necessario considerare la possibilità 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, passare access a ) o disabilitare gli avvisi di deprecazione correlati a _accessPOSIX 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.

  • 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, come gets, dispongono di versioni sicure che richiedono di specificare una dimensione massima.

  • Terminazione Null

    Alcune funzioni che hanno lasciato stringhe potenzialmente non terminate hanno versioni sicure, assicurandosi 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 impostate errno e spesso restituiscono anche un errno tipo di codice, 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
Overload di modelli sicuri
File C Runtime (CRT) e C++ Standard Library (STL) .lib