Funzionalità di sicurezza in CRTSecurity Features in the CRT

Molte funzioni CRT precedenti hanno versioni più sicure e recenti.Many old CRT functions have newer, more secure versions. Se esiste una funzione sicura, la precedente versione, meno sicura, è contrassegnata come deprecata e la nuova versione ha il suffisso _s ("sicura").If a secure function exists, the older, less secure version is marked as deprecated and the new version has the _s ("secure") suffix.

In questo contesto, "deprecata" significa semplicemente che l'utilizzo di una funzione non è consigliato; non indica che è in programma la rimozione della funzione dal CRT.In this context, "deprecated" just means that a function's use is not recommended; it does not indicate that the function is scheduled to be removed from the CRT.

Le funzioni sicure non impediscono o non correggono gli errori di sicurezza; piuttosto, rilevano gli errori quando si verificano.The secure functions do not prevent or correct security errors; rather, they catch errors when they occur. Eseguono controlli aggiuntivi per le condizioni di errore e, in caso di errore, chiamano un gestore errori (vedere Convalida dei parametri).They perform additional checks for error conditions, and in the case of an error, they invoke an error handler (see Parameter Validation).

Ad esempio, la funzione strcpy non consente di stabilire se la stringa che si sta copiando è troppo grande per il suo buffer di destinazione.For example, the strcpy function has no way of telling if the string that it is copying is too big for its destination buffer. Tuttavia, la relativa controparte sicura, strcpy_s, accetta la dimensione del buffer come parametro, pertanto può determinare se si verifica un sovraccarico del buffer.However, its secure counterpart, strcpy_s, takes the size of the buffer as a parameter, so it can determine if a buffer overrun will occur. Se si utilizza strcpy_s per copiare undici caratteri in un buffer di dieci caratteri, è un errore da parte dell'utente; strcpy_s non può correggere l'errore, ma può rilevare l'errore e notificare richiamando il gestore di parametro non valido.If you use strcpy_s to copy eleven characters into a ten-character buffer, that is an error on your part; strcpy_s cannot correct your mistake, but it can detect your error and inform you by invoking the invalid parameter handler.

Eliminazione degli avvisi di deprecazioneEliminating deprecation warnings

Esistono diversi modi per eliminare gli avvisi di deprecazione per le funzioni precedenti, meno sicure.There are several ways to eliminate deprecation warnings for the older, less secure functions. Il più semplice è quello di definire _CRT_SECURE_NO_WARNINGS o di usare il pragma warning.The simplest is simply to define _CRT_SECURE_NO_WARNINGS or use the warning pragma. Disabilita gli avvisi di deprecazione, ma i problemi di sicurezza che hanno causato gli avvisi persistono.Either will disable deprecation warnings, but of course the security issues that caused the warnings still exist. È preferibile lasciare gli avvisi di deprecazione abilitati e usufruire delle nuove funzionalità di sicurezza CRT.It is far better to leave deprecation warnings enabled and take advantage of the new CRT security features.

In C++, il modo più semplice per farlo prevede l'uso di overload di modelli sicuri, che in molti casi eliminerà gli avvisi di deprecazione sostituendo le chiamate alle funzioni deprecate con chiamate alle nuove versioni sicure di tali funzioni.In C++, the easiest way to do that is to use Secure Template Overloads, which in many cases will eliminate deprecation warnings by replacing calls to deprecated functions with calls to the new secure versions of those functions. Ad esempio, considerare la chiamata deprecata a strcpy:For example, consider this deprecated call to 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.Defining _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES as 1 eliminates the warning by changing the strcpy call to strcpy_s, which prevents buffer overruns. Per altre informazioni, vedere Secure Template Overloads.For more information, see Secure Template Overloads.

Per queste funzioni deprecate senza overload dei modelli sicuri, è necessario considerare la possibilità di aggiornare manualmente il codice per utilizzare le versioni sicure.For those deprecated functions without secure template overloads, you should definitely consider manually updating your code to use the secure versions.

Un'altra origine degli avvisi di deprecazione, indipendente dalla sicurezza, sono le funzioni POSIX.Another source of deprecation warnings, unrelated to security, is the POSIX functions. 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.Replace POSIX function names with their standard equivalents (for example, change access to _access), or disable POSIX-related deprecation warnings by defining _CRT_NONSTDC_NO_WARNINGS. Per altre informazioni, vedere Deprecated CRT Functions (Funzioni CRT deprecate).For more information, see Deprecated CRT Functions.

Funzionalità di sicurezza aggiuntiveAdditional Security Features

Alcune delle funzionalità di sicurezza includono quanto segue:Some of the security features include the following:

  • Parameter Validation.Parameter Validation. I parametri passati alle funzioni CRT vengono convalidati, nelle funzioni sicure e in molte versioni preesistenti di funzioni.Parameters passed to CRT functions are validated, in both secure functions and in many preexisting versions of functions. Le convalide includono:These validations include:

    • Verifica dei valori NULL passati alle funzioni.Checking for NULL values passed to the functions.

    • Verifica dei valori enumerati per la validità.Checking enumerated values for validity.

    • Verifica che i valori integrali siano in intervalli validi.Checking that integral values are in valid ranges.

  • Per altre informazioni, vedere Convalida dei parametri.For more information, see Parameter Validation.

  • Un gestore per i parametri non validi è accessibile anche allo sviluppatore.A handler for invalid parameters is also accessible to the developer. Quando si riscontra un parametro non valido, anziché interrompere ed uscire dall'applicazione, CRT fornisce un modo per controllare questi problemi con la funzione _set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler.When an encountering an invalid parameter, instead of asserting and exiting the application, the CRT provides a way to check these problems with the _set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler function.

  • Sized Buffers.Sized Buffers. Le funzioni sicure richiedono che le dimensioni del buffer siano passate a qualsiasi funzione che scrive in un buffer.The secure functions require that the buffer size be passed to any function that writes to a buffer. Le versioni sicure verificano che il buffer sia sufficientemente grande prima di scriverci dentro, contribuendo ad evitare pericolosi sovraccarichi del buffer che potrebbero consentire l'esecuzione di codice dannoso.The secure versions validate that the buffer is large enough before writing to it, helping to avoid dangerous buffer overrun errors that could allow malicious code to execute. Queste funzioni in genere restituiscono un tipo errno di codice di errore e richiamano il gestore di parametro non valido se la dimensione del buffer è troppo piccola.These functions usually return an errno type of error code and invoke the invalid parameter handler if the size of the buffer is too small. Le funzioni che leggono da buffer di input, come gets, dispongono di versioni sicure che richiedono di specificare una dimensione massima.Functions that read from input buffers, such as gets, have secure versions that require you to specify a maximum size.

  • Null termination.Null termination. Alcune funzioni che accettavano stringhe potenzialmente non terminate hanno versioni sicure che garantiscono che le stringhe abbiano terminazione null.Some functions that left potentially non-terminated strings have secure versions which ensure that strings are properly null terminated.

  • Enhanced error reporting.Enhanced error reporting. Le funzioni sicure restituiscono codici di errore con più informazioni sugli errori rispetto a quelle disponibili con le funzioni preesistenti.The secure functions return error codes with more error information than was available with the preexisting functions. Le funzioni sicure e molte delle funzioni preesistenti ora impostano errno e spesso restituiscono un tipo di codice errno, per fornire una segnalazione di errori migliore.The secure functions and many of the preexisting functions now set errno and often return an errno code type as well, to provide better error reporting.

  • Filesystem security.Filesystem security. Le API di I/O di file sicuri supportano l'accesso sicuro ai file nel caso predefinito.Secure file I/O APIs support secure file access in the default case.

  • Windows security.Windows security. Le API di processo sicuro rafforzano i criteri di sicurezza e consentono agli ACL di essere specificati.Secure process APIs enforce security policies and allow ACLs to be specified.

  • Format string syntax checking.Format string syntax checking. Le stringhe non valide vengono rilevate, ad esempio, usando dei caratteri di campo di tipo non corretto nelle stringhe di formato printf.Invalid strings are detected, for example, using incorrect type field characters in printf format strings.

Vedere ancheSee Also

Convalida dei parametri Parameter Validation
Overload di modelli sicuri Secure Template Overloads
CRT Library Features (Funzionalità della libreria CRT)CRT Library Features