F?g?e?t?s? printf security

di Anonimizzato6541 il
5 risposte
Ho appena sfatato il mito della sicurezza fgets. Qualcuno ne era a conoscienza?

5 Risposte

  • In effetti la sicurezza 'in più' rispetto a gets() è quella di impostare il numero massimo di caratteri N da leggere ed inserire nell'array di caratteri,e sempre rispetto a gets() il carattere '\n' viene considerato valido, per cui è inserito nella stringa. Però, nessuno mi vieta di inserire un valore N maggiore delle dimensioni reali della stringa, per cui anche fgets(), se non usata in modo corretto, porta a dei rischi di buffer overflow. Facendo alcune prove, il rischio è evidente se si usa con fgets() un array allocato in heap memory (alla chiusura infatti il programma smette di funzionare).
    Un'altra 'instabilità' che ho notato della fgets() è anche il fatto che non si preoccupa di verificare i flags del file, quindi anche se il file ha il 'badbit' settato, la fgets() legge lo stesso l'input.
  • Dopo un'esaltazione iniziale, molto debugging ecco il codice incriminato...
    
    #include <stdio.h>
    #define SIZE 128
    
    int x=0;
    int main()
    {
    	char buff[SIZE];
    	fgets (buff,SIZE,stdin);
    	printf (buff);
    	if (x==64)
    		printf ("hacked\n");
    	
    	return 0;
    }
    
    ...ma la colpa è della printf!!!!
  • Ciao ixamit,
    dai che siamo curiosi! spiegaci un pò
  • Ciao barba59
    Non credo che sia permesso in questa sede.
    Anche se parliamo di sicurezza qualcuno potrebbe intendere differentemente oppure farne uso improprio. Lo spiegherò nei dettagli sui miei spazi
  • Ciao ixamit,
    giusto, non ci avevo pensato. Vorrà dire che verro a leggerti.
Devi accedere o registrarti per scrivere nel forum
5 risposte