Come prevenire l'attacco di overflow del buffer?

0
int main(void) {
    char buff[15];
    int pass = 0;
    printf("\n Enter the password : \n");
    gets(buff);
    if (strcmp(buff, "thegeekstuff")) {
        printf("\n Wrong Password \n");
    }
    else {
        printf("\n Correct Password \n");
        pass = 1;
    }
    if (pass) {
        /* Now Give root or admin rights to user*/
        printf("\n Root privileges given to the user \n");
    }
    return 0;
}

so che devo passare il passaggio in modo che non permetta il passaggio di un valore diverso da zero, ma come faccio?

    
posta Octavian 06.12.2018 - 13:44
fonte

2 risposte

1

gets () non limita il suo input, è impossibile da usare in modo sicuro.

Suggerirei di usare

fgets(buff,15,stdin);

invece di get.

Potrebbero esistere altre soluzioni.

    
risposta data 06.12.2018 - 13:50
fonte
0

Dichiarate il char buffer dopo ogni altro tipo di dichiarazione, anche nelle strutture, poiché il char buffer può sovrascrivere lo spazio di allocazione delle altre variabili in fase di esecuzione. Riempi sempre il buffer con gli zeri (memset), prima di usarlo e inizializza (imposta a zero o un valore predefinito) qualsiasi altra variabile dopo la dichiarazione. Usa Fgets come suggerito, quando conosci esattamente la dimensione della tua matrice e usi strncmp, invece di strcmp, per lo stesso motivo.

    
risposta data 05.01.2019 - 17:44
fonte

Leggi altre domande sui tag