Standard-C-Verwendung von getenv und sichere Praktiken

Ich bin versucht, zu schreiben C-code, die einige ENV-Variablen, die in einer UNIX-Umgebung. Die Frage ist: Könnte das Lesen der Variablen (zum Beispiel getenv()) verursachen buffer overflow? Außerdem, wie finde ich die Grenze des env-variable Größe für meine Plattform ? Zum Beispiel die header-Datei?

Schließlich, was sind die sicherste code Praktiken, die in der Lesung Umgebung geliefert Variablen?

Eine der sichersten ist nicht vorausgesetzt, Sie werden immer finden, dass die variable ' r suchen, da die env-Variablen können gesetzt werden/unsetted durch den shell-Benutzer.
"ist mit getenv() sicher nicht zu bekommen übergelaufen" Nicht zu überlaufen was? Sie haben nicht geliefert, ein Puffer, so dass getenv muss aufpassen, dass sich.
Ich überarbeitete die Frage
Beachten Sie, dass die C-Norm sagt string zeigte auf möglicherweise überschrieben werden durch einen nachfolgenden Aufruf getenv(), das ist nicht das, was die meisten Menschen erwarten, dass (noch ist es gängige Praxis in Unix-Systemen für das problem zu sein). So streng, Sie brauchen, um eine Kopie aller Umgebungsvariablen zurückgegeben getenv() vor dem Aufruf getenv() wieder. Es gibt keine header, die direkt definiert einen Grenzwert für die Größe des env-var-Namen oder-Werte. Auf POSIX, der ARG_MAX limit (was Häufig ist 256 KiB) ist die Gesamtgröße der "Umwelt-plus-Argumente', aber das ist ziemlich groß und nicht immer eine Feste Begrenzung.

InformationsquelleAutor user1944224 | 2013-02-22

Schreibe einen Kommentar