Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: FAQ - C++ (auch C++0x, C++11) ::  wieso man die Funktion system meiden soll     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Gerard
Mitglied

Benutzerprofil
Anmeldungsdatum: 05.01.2002
Beiträge: 6119
Beitrag Gerard Mitglied 20:23:00 04.12.2002   Titel:   wieso man die Funktion system meiden soll            Zitieren

aus kingruedis ISO C FAQ
Warum sollte man kein oder nur in wenigen Fällen system() einsetzen?

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++ Code:
ostringstream a;
a << "grep " << userinput << " db";
system( a.str().c_str() );
C/C++ Code:
ostringstream a;
a << "grep " << userinput << " db";
system( a.str().c_str() );
C/C++ Code:
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

[ Dieser Beitrag wurde am 24.02.2003 um 02:43 Uhr von Dimah editiert. ]
Werbeunterbrechung
C/C++ Forum :: FAQ - C++ (auch C++0x, C++11) ::  wieso man die Funktion system meiden soll   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.