Anfänger Problem
-
Hallo, ich hab noch wenige C++ Kenntnisse. Allerdings hab ich eine simple Aufgabe an der Uni bekommen, wo ich diese benötige. Wäre nett wenn mir hier jemand helfen könnte.
folgernder Code Schnipsel:
void read() {
char read_buf[100];
gets(read_buf);
}Das Code Stück soll auf die Anfälligkeit eines Buffer Overflows untersucht werden und ggf. eine Möglichkeit den zu verhindern.
Danke im voraus!
-
scanf("%99s",buf);
-
Das Code Stück soll auf die Anfälligkeit eines Buffer Overflows untersucht werden
Dazu solltest du zwei Dinge berücksichtigen:
char read_buf[100];
Das ist ein Array der festen Größe 100. Du hast also Platz für ganz genau 100 chars.
gets(read_buf);
Du liest mittels der Eingabefunktion gets. Also brauchst du deren Beschreibung:
http://unixhelp.ed.ac.uk/CGI/man-cgi?gets+3gets() reads a line from stdin into the buffer pointed to by s until
either a terminating newline or EOF, which it replaces with '\0'.Jetzt sollte das Problem bereits klar sein - achte auf die "until"-Bedingung.
Ansonsten musst du noch etwas weiterlesen:No check for buffer overrun is performed (see BUGS below) [...]
Never use gets(). Because it is impossible to tell without knowing the data in advance how many characters gets() will read, and because
gets() will continue to store characters past the end of the buffer, it
is extremely dangerous to use. It has been used to break computer
security. Use fgets() instead.