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

di il
5 risposte

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

Ho appena sfatato il mito della sicurezza fgets. Qualcuno ne era a conoscienza?

5 Risposte

  • Re: F?g?e?t?s? printf security

    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.
  • Re: F?g?e?t?s? printf security

    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!!!!
  • Re: F?g?e?t?s? printf security

    Ciao ixamit,
    dai che siamo curiosi! spiegaci un pò
  • Re: F?g?e?t?s? printf security

    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
  • Re: F?g?e?t?s? printf security

    Ciao ixamit,
    giusto, non ci avevo pensato. Vorrà dire che verro a leggerti.
Devi accedere o registrarti per scrivere nel forum
5 risposte