3 Stimmen

Secure C und die Universitäten - trainiert für Pufferüberlauf

Ich habe vor kurzem einen Universitätskurs in C absolviert, daher fehlt mir natürlich die Erfahrung.

Einige Universitäten neigen dazu, ihren Studenten sicheres Programmieren beizubringen, oder zumindest einige Elemente . Es gibt sogar ein Video (entnommen aus ici ).

Das Kopieren von Strings in C erfordert - soweit ich weiß - die Funktionen strcpy oder string.h. Wie verwenden Sie es sicher in der alltäglichen Programmierung? Gibt es Funktionen, die die Zuweisung so handhaben, dass Pufferüberläufe verhindert werden? Es gibt die CERT-Standard für sichere Kodierung für C . Sie bietet Beispiele und konforme Lösungen:

int main(int argc, char *argv[]) {
  /* ... */
  char prog_name[128];
  strcpy(prog_name, argv[0]);
  /* ... */
}

Und ihre Alternative ist:

int main(int argc, char *argv[]) {
  /* ... */
  char *prog_name = (char *)malloc(strlen(argv[0])+1);
  if (prog_name != NULL) {
    strcpy(prog_name, argv[0]);
  }
  else {
    /* Couldn't get the memory - recover */
  }
  /* ... */
}

Entnommen von hier, 2. Beispiel .

Aber soweit ich das verstehe, ist das nur eine größere Herausforderung, mehr Code, mehr Arbeit. Warum ändert niemand die Bibliothek selbst? Oder warum stellt zumindest niemand eine sichere alternative Bibliothek oder Funktionen bereit, die das richtig handhaben?

Vielen Dank für die Lektüre, wishi

0voto

EvilTeach Punkte 27313
int main
(
    int argc, 
    char *argV[]
) 
{
   char prog_name[128];
   if (strlen(argV[0]) < sizeof(prog_name))
   {
       strcpy(prog_name, argV[0]);
   }
   else
   {
       printf("%s is too large for the internal buffer\n", argV[0]);
   }

   return 0;
}

0voto

kliketa Punkte 1248

Vielleicht finden Sie die Antworten auf folgende Fragen nützlich diese Frage

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X