Ho provato a cercare questa domanda, forse perché è ovvio e ho dato un'occhiata a Wikipedia e OWASP
I buffer overflow si verificano solo quando si supera la dimensione dell'array o si può sovraccaricare il buffer di altre cose?
Si verificano overflow del buffer, nessuna sorpresa, buffer.
Un buffer è una sequenza di dati. Può o non può avere un tipo continuo distinto. Su alcuni sistemi potrebbe anche non essere costituito da byte. Supponendo che abbia una lunghezza massima (o almeno una prevista), allora può verificarsi una condizione in cui la dimensione dei dati che entrano nel buffer supera la lunghezza massima, portando ad un overflow (cioè copia oltre i limiti). Ciò può verificarsi a causa del buffer di lunghezza fissa e dei dati copiati più grandi di quella lunghezza, oppure a causa di un errore nella gestione dell'allocazione dinamica della memoria nel caso di un buffer a lunghezza variabile.
Tecnicamente il buffer può essere di qualsiasi tipo. Ad esempio, memcpy'ing un int (32 bit) su un datatype breve (16 bit) è un overflow del buffer - il buffer aveva una dimensione di 16 bit e ne abbiamo copiati 32, con conseguente sovraccarico dei dati sui seguenti 16 bit dopo il buffer di destinazione.
Il motivo per cui di solito parliamo di array è che sono il tipo di dati più comune da vedere in un contesto di overflow del buffer, assumendo che si consideri una stringa come un tipo di array (ad esempio char*
, che è un puntatore a qualsiasi numero di istanze char
). Nella maggior parte dei casi hai a che fare con un caso del genere, quindi ha senso discutere le cose in termini di array perché è un esempio concreto di programmazione.
Leggi altre domande sui tag buffer-overflow