From a68a20ca28aa97b59ae784ba72cd552d84f1c773 Mon Sep 17 00:00:00 2001 From: Jan Klemkow Date: Wed, 9 Jan 2013 13:20:26 +0100 Subject: Finish std-c-lib text and presentation. --- document.asciidoc | 31 ++++++++++++++++++++++--------- presentation.asciidoc | 8 +++++--- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/document.asciidoc b/document.asciidoc index a2e30d3..6a36eb0 100644 --- a/document.asciidoc +++ b/document.asciidoc @@ -92,18 +92,31 @@ Standard-C-Bibliothek auf genommen, welche als Argument Maximallaengen [source,c] ------------------- -strcpy(char *dst, const char *src); -strncpy(char *dst, const char *src, size_t len); -strlcpy(char *dst, const char *src, size_t dstsize); +char * strcpy(char *dst, const char *src); +char * strncpy(char *dst, const char *src, size_t len); +char * strlcpy(char *dst, const char *src, size_t dstsize); + +size_t strlen(const char *s); +size_t strnlen(const char *s, size_t maxlen); ------------------- Hierbei gibt es zwei Ansätze mit Längen umzugehen. -TODO: strncpy() strlcpy() - - * gets() - * strlen() - * strcpy() - * str..() +Die Funktionen +strncpy(3)+ sowie +strlcpy(3)+ sind nachtraeglich in die +Standard-C-Bibliothek aufgenommen worden um dem Programmierer fuer diese +Aufgaben Sichere Funktionen zur Verfuegung zu stellen. +Die Funktion wie +gets(3)+ wurde sogar vollkommen entfernt, weil diese Funktion +unter keine Umstaenden sicher zu gebrauchen ist. +Selbst bei scheinbar trivialen Aufgaben wie dem ermitteln der Laenge einer +unbekannten Zeichenkette koennen Speicherbereichsverletzungen auftreten. +Die Funktion +strlen(3)+ durch laeuft eine Zeichenkette solange, bis sie ein +Null-Byte findet. +Wenn die Zeichenkette nicht durch dieses Zeichen abgeschlossen ist, wuerde die +Funktion aus den Speicherbereich der Zeichenkette herrauslaufen und dabei +eventuell auf nicht gemappte Speicherbereiche zugreifen. +Aus diesem Grund wurde die Funktion +strnlen(3)+ eingefuehrt. +Diese Funktion bekommt ebenfalls die Laenge des Speicherbereichs uebergeben. +Dadurch wird unabhaenig vom Inhalt der Zeichenkette die Grenze des +Speicherbereichs eingehalten. == Netzwerk-Programmierung diff --git a/presentation.asciidoc b/presentation.asciidoc index b6e6a61..828c524 100644 --- a/presentation.asciidoc +++ b/presentation.asciidoc @@ -8,8 +8,12 @@ * Pufferueberlaeufe * +strcpy(2)+ vs. +strncpy(2)+ - * allgemeine Hinweise zur sicheren Programmierung: + * allgemeine sicheren Programmierung: *Carnegie Mellon University* ** http://www.cert.org/secure-coding/ + *** C + *** C++ + *** Perl + *** Java == Zu viele Rechte @@ -57,8 +61,6 @@ image::kernel-design.svg[width="100%"] == Kernel-Design image::kernel-context-sw.svg[width="100%"] -== Kernel-Design - == Vielen Dank fuer die Aufmerksamkeit Fragen? -- cgit