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