Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Zitat von »"nix da"«
Ich prädige es jetzt kein 9x mehr in diesem Forum!
system() ist zwar eine standard Funktion, aber die Parameter sind total Platform abhängig! Deswegen sollte man auf system() genauso versuchen zu verzichten, wie auf Systemfunktionen! Und wenn man mal auf die Idee kommt system() zu benuzten, sollte man lieber die passende Systemfunktion nutzen als ein system() aufruf! Einerseits, kann man Systemfunktions aufrufe auf anderen Platformen leicht emulieren und system() ist sehr teuer und gefaehrlich, da immer eine Shell gestartet wird und die Shell zum Beispiel das Programm einfach unterbrechen kann oder informationen ausgeben!
Wichtig ist auch, dass für system() jedes mal eine neue Shell gestartet wird und nach dem Aufruf von system() beendet wird (was natürlich sehr langsam ist!), also nützt das Verändern von zB Umgebungsvariablen (was man auch standard konform mit putenv(3) machen kann) nichts, da sie wieder verschwinden!
system() hat außerdem das Problem, dass das Programm hängen bleiben kann, wenn der Parameter falsch war und die Shellwartet, dass der User reagiert!
Außerdem kann system() zu einem Sicherheitsloch führen, wenn man zum Beispiel ein CGI Programm schreibt und dann mit system() einen Aufruf zum Beispiel zum durchsuchen einer Datei mit den Benutzereingaben durchführt
C-/C++-Quelltext
1 2 3 ostringstream a; a << "grep " << userinput << " db"; system( a.str().c_str() );
so könnte der User von einem anderen Host einfach Shellmetha Zeichen benutzen, die fast jeder Shell hat, um weitere Befehle auszuführen, die die CGI, dann mit den Rechten des Programmes ausführt. Ein Beispiel sei hier nur die Eingabe von "; rm -rf / ; echo "!
Weiter Infos: http://www.whitefang.com/sup/secure-faq.html#INPUT3
Administrator
Werbeanzeige