Sicurezza e Bounds-Checking
Le vulnerabilità di sicurezza generate dalle classiche funzioni di stringa derivano dalla loro cecità verso la grandezza del buffer di destinazione.
C11 Annex K: Le funzioni con _s
Section titled “C11 Annex K: Le funzioni con _s”Nel 2011, lo standard C ha introdotto l’Annex K. Queste funzioni richiedono obbligatoriamente che il programmatore specifichi la dimensione massima del buffer di output, aggiungendo il suffisso _s.
errno_t strcpy_s(char * restrict s1, rsize_t s1max, const char * restrict s2);Soluzioni POSIX: Allocazione Automatica
Section titled “Soluzioni POSIX: Allocazione Automatica”In ambiente POSIX (Linux/macOS), puoi usare strdup (String Duplicate).
#include <string.h>
char *copia = strdup(testo_originale);if (copia != NULL) { free(copia); // strdup usa malloc internamente!}💻 Esercizio Pratico: Bug-Hunting Buffer Overflow
Section titled “💻 Esercizio Pratico: Bug-Hunting Buffer Overflow”In questo scenario, uno sviluppatore ha scritto una funzione insicura che va in Buffer Overflow sovrascrivendo altre variabili nello stack (sebbene il compilatore qui protegga). Metti in sicurezza il codice usando strncpy e forzando il terminatore null, oppure limitando lo spazio di memoria.