Sicherheit eines cgi-skripts
TED116
- cgi
0 Andreas Bierhals0 xwolf0 xwolf
Hallöle,
als Anfänger in puncto cgi-Programmierung (perl) habe ich nun eine Frage an das Forum. Leider habe ich im Archiv noch nicht so das passende für mich gefunden.
Nachdem ich mittlerweile ein paar cgi-Programme geschrieben habe (Formularmailer, counter, Suchmaschine), sollten diese nun bevor sie ins WEB gestellt werden auf ihre Sicherheit überprüft werden. Gibt es da irgendwelche Tipps + Tricks?
Oder auf was muss ich achten?
viele Grüße und ein fröhliches Schaffen (auch wenn erst Dienstag ist).
TED116
Moin,
Nachdem ich mittlerweile ein paar cgi-Programme geschrieben habe (Formularmailer, counter, Suchmaschine), sollten diese nun bevor sie ins WEB gestellt werden auf ihre Sicherheit überprüft werden. Gibt es da irgendwelche Tipps + Tricks?
Oder auf was muss ich achten?
Im Web findet sich bereits zahlreiche Dokumentation zu Thema "cgi-security", Beispiel: http://cgi.resourceindex.com/Documentation/Security/.
Dinge, die mir spontan zu diesem Thema einfallen sind (ohne Anspruch auf Vollständigkeit).
Als erstes sollte man peinlich genau darauf achten, daß cgi-Skripte nur ausgeführt und nicht etwa downgeloadet werden können. Normalerweise sollte das kein Thema sein, aber bei einigen exotischeren Webservern sollte man wenigstens mal nachgucken...
Man kann sich in keiner Weise darauf verlassen, daß die Formularfelder, welche Du für das cgi-Skript vorgesehen hast, irgendetwas damit zu tun haben, was dann tatsächlich beim Skript ankommt. Es ist immer möglich, sich irgendein eigenes unsinniges Formular zu basteln und ein
<form action="http://Dein.Ahnungsloses.CgiScript.com" method="post">
voranzustellen.
Man kann sich auch nicht darauf verlassen, daß Zeichenketten aus Formularfeldern eine bestimmte Maximallänge nicht überschreiten. Bösartige User könnten z.B. in ein Feld mit der Bezeichnung "eMail" den Inhalt einer 5 MB großen Textdatei kopieren und das dann abschicken. Bei Perl ist dies aufgrund der automatisch-flexiblen Stringverwaltung meist weniger ein Problem als z.B. bei schlecht programmierten C-Programmen, in denen oft die Länge der String-Buffer fest begrenzt wird. Geschickte Hacker können sogar Buffer-Überläufe dazu ausnutzen, daß unerwünschter Code auf dem Server-Rechner ausgeführt wird. Eine Idee wäre evtl., gleich ganz am Anfang des Skriptes zu testen, ob CONTENT_LENGTH sich innerhalb vernünftiger Maßstäbe bewegt und im Falle von z.B. CONTENT_LENGTH>10^5 das Skript gleich abzubrechen oder so.
Wenn von perl aus Systemkommandos ausgeführt werden, ist besondere Vorsicht angesagt, da mittels pipe-Zeichen etc. harmlos aussehende Befehle zu völlig anderen umgemünzt werden können.
Also aus allen Variablen, die in Systemkommandos eingehen, Zeichen wie < > usw. entfernen, oder besser noch eine Liste mit zulässigen Zeichen festlegen und alles andere herauslöschen.
Ich hoffe, das hilft Dir für den Anfang erstmal weiter...
Viele Grüße
Andreas
Tach!
tststs..du wirst meinen Forum untreu :)
als Anfänger in puncto cgi-Programmierung (perl) habe ich nun eine Frage an das Forum. Leider habe ich im Archiv noch nicht so das passende für mich gefunden.
Nachdem ich mittlerweile ein paar cgi-Programme geschrieben habe (Formularmailer, counter, Suchmaschine), sollten diese nun bevor sie ins WEB gestellt werden auf ihre Sicherheit überprüft werden. Gibt es da irgendwelche Tipps + Tricks?
In meinen Tutor findest du auf der vorletzten Seite etwas drueber.
Ansonsten: Alle Benutzereingabe sind zu behandeln wie rohe Eier!
Erst recht, wenn du diese nutzen willst, um damit Dateien anzusprechen, Mails
zusenden oder allgemein Systemaufrufe ausfuehren willst.
Wenn du mein web-Modul hast, schau dir mal die Routine Check_Name an.
Dort sind die Empfehlungen des CERTs eingearbeitet, was man erlauben sollte bei Sonderzeichen..
Der Antwort von Andreas Bierhals stimme ich ansonsten fast ueberall zu.
Nur bei einem waere ich sehr vorsicht: Wenn du dir CGI-Skripts aus Archiven holst, dann musst du es dir vorher anschqauen.
Insbesonders, und gerade auch das Standardarchiv cgi-resources.com enthaelt einige Skripts die unsicher sind. So z.B. das bekannte survey.cgi von BigNoseBird, welches dort ueber 1,5 Jahre war, von ueber 750 Leuten als eines der besten Skripten seiner Kategorie galt, aber trotzdem ein Sicherheitsloch hatte - was bis Anfang dieses Monats keiner der 750 fuer das Ding stimmten, bemerkt hatten...
Ein Standard-Weg um Unsicherheiten festzustellen gibt es nicht, wohl aber Hinweise.
ich fang meistens so an zu testen:
1. grep "open" (cgi-skript)
2. grep auf alle Variablen innerhalb der opens
3. grep auf die Herkunft der Variablen
4. Anschauen, wie das Parsing der Netzdaten gemacht wird.
...
dito fuer system, touch, usw...
Warauf man ueberhaupt nicht achten sollte ist:
Ansonsten gibt es noch viel zu sagen. Aber eigentlich laeuft es auf eines heraus: Du kriegst frueher oder spaeter ein Gefuehl dafuer, was gut ist und was nicht...
Ciao,
Wolfgang
Hi nochmal,
einen Link hab ich vergessen. Schaut mal hier:
http://www.xwolf.com/security/
Ciao,
Wolfgang