Installation eigener CGI-Skripte


Wider besseres Wissen haben wir uns durchgerungen es doch einmal mit Skripten für Studenten zu versuchen. Dieser Service ist experimentell, und wird eingestellt, sobald wir irgendwelche negativen Erfahrungen damit machen.

Was ist ein CGI-Skript

Skript ist in diesem Zusammenhang etwas irreführend. Tatsächlich handelt es sich um irgendein Programm, dem die Parameter vom Webserver in einer bestimmten Form übergeben werden, eben dem "Common Gateway Interface".

Common Gateway Interface - CGI/1.1

Was gilt es zu beachten

Die CGI-Skripte werden bei uns mit den Rechten der jeweiligen Benutzerkennung ausgeführt, und können dort zum Beispiel den Mailfolder auslesen oder Dateien löschen. Wer ein solches Skript betreibt, handelt sich also leicht Sicherheitsprobleme ein.

Allgemein muß man verhindern, daß irgendwelche Eingaben, insbesondere auch böswillig geplante, einen unerwünschten Effekt haben. Dieses Skript zum (zugegebenermaßen trivialen) Beispiel

#!/bin/sh
echo your input was $USER_INPUT
wirkt mit der richtigen Eingabe wie ein ls auf beliebigen Verzeichnissen. Von Shellskripten ist generell abzuraten, da schon kleine Skripte sehr schwierig narrensicher zu gestalten sind. Explizite Skriptsprachen wie Tcl oder Perl sind da schon einfacher handzuhaben, besonders an die "tainted" Option von Perl sei an dieser Stelle erinnert. Fehler in Binarys sind meist nur sehr schwierig auszunutzen (abgesehen von system(user_input) ;-), sie können daher als verhältsismäßig sicher gelten.

The World Wide Web Security FAQ: 6. CGI (Server) Scripts

Wie geht's bei uns

Dateien im Verzeichnis .public_html/cgi-bin einer Benutzerkennung werden vom Webserver nicht angezeigt, sondern ausgeführt. Da sie mit den Rechten des jeweiligen Benutzers ausgeführt werden, müssen sie nicht für andere les- oder ausführbar sein. Der Inhalt des cgi-bin Verzeichnis wird auch nicht vom Server aufgelistet.

Um einige grundlegende Sicherheitslücken zu schließen verwenden wir einen CGI-Wrapper, der unter anderem prüft, ob cgi-bin oder das Skript darin für andere schreibbar ist, oder ob es sich um symbolische Links handelt. Ist das der Fall, wird das Skript nicht ausgeführt.

CGI Programming FAQ

TeamOne SELFHTML


Fragen und Anregungen kann man wie üblich an Public richten.
Ergänzt am 5.6.2000 (Robert)

Public (public@rbg.informatik.tu-darmstadt.de)