Skip to content

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.

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);

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.