Uso di funzioni stringa sicure
Molti problemi di sicurezza del sistema sono causati da una gestione del buffer insufficiente e dall'overrun del buffer risultante. La gestione del buffer scarsa è spesso associata alle operazioni di manipolazione delle stringhe. Le funzioni di manipolazione delle stringhe standard fornite dalle librerie di runtime del linguaggio C/C++ (strcat, strcpy, sprintf e così via) non impediscono la scrittura oltre la fine dei buffer.
Due nuovi set di funzioni di manipolazione delle stringhe, denominate funzioni di stringa sicure, forniscono un'elaborazione aggiuntiva per la gestione corretta del buffer nel codice. Queste funzioni stringa sicure sono disponibili in Windows Driver Kit (WDK) e per Microsoft Windows XP SP1 e versioni successive di Driver Development Kit (DDK) e Windows SDK. Sono destinati a sostituire le controparti C/C++ predefinite e routine simili fornite da Windows.
Un set di funzioni stringa sicure è per l'uso nel codice in modalità kernel. Queste funzioni vengono prototipo in un file di intestazione denominato Ntstrsafe.h. Questo file di intestazione e una libreria associata sono disponibili in WDK.
L'altro set di funzioni stringa sicure è usato nelle applicazioni in modalità utente. Un file di intestazione corrispondente, Strsafe.h, contiene prototipi per queste funzioni. Tale file e una libreria associata sono disponibili in Windows SDK. Per altre informazioni su Strsafe.h, vedere Uso delle funzioni Strsafe.h.
Il set di funzioni stringa sicure in modalità kernel è costituito dai due subset seguenti:
Funzioni stringa sicure per i caratteri Unicode e ANSI
Ognuna di queste funzioni è disponibile in una versione con suffisso W che supporta caratteri Unicode a byte doppio e una versione suffisso A che supporta caratteri ANSI a byte singolo. Ad esempio, RtlStringCbCatN, che concatena due stringhe e limita la lunghezza della stringa accodata, è disponibile come RtlStringCbCatNW e RtlStringCbCatNA.
Funzioni stringa sicure per le strutture di UNICODE_STRING
Ognuna di queste funzioni accetta una struttura UNICODE_STRING come parametro di input o output o entrambi. Ad esempio, RtlStringCbCopyUnicodeString accetta la struttura come parametro di input, RtlUnicodeStringCopyString Accetta la struttura come parametro di output e RtlUnicodeStringCopy accetta la struttura come parametro di input e output.
Le funzioni stringa sicure in modalità kernel forniscono le funzionalità seguenti:
Ogni funzione stringa sicura riceve le dimensioni del buffer di destinazione come input. La funzione può quindi garantire che non venga scritta oltre la fine del buffer.
Le funzioni stringa Unicode e ANSI terminano tutte le stringhe di output con un carattere NULL, anche se l'operazione tronca il risultato previsto.
Tutte le funzioni stringa sicure restituiscono un valore NTSTATUS, con un solo codice di esito positivo possibile (STATUS_SUCCESS).
La maggior parte delle funzioni stringa sicure è disponibile sia in una versione con conteggio dei byte che in una versione con conteggio dei caratteri. Ad esempio, RtlStringCbCata concatena due stringhe con conteggio byte e RtlStringCchCata concatena due stringhe con conteggio dei caratteri.
La maggior parte delle funzioni stringa sicure è disponibile in una versione estesa e suffisso ex-suffisso che offre funzionalità aggiuntive. Ad esempio, RtlStringCbCatExa estende la funzionalità di RtlStringCbCata.
Questa sezione include gli argomenti seguenti: