Wenn ich es jetzt an der Kommandozeile aufrufe, sieht es nach einer Verschlimmbesserung aus, denn es terminiert nun auch dort wieder nicht:
perl -T /var/www/cgi-bin/test.pl
<h1>Software error:</h1>
<pre>Insecure $ENV{PATH} while running with -T switch at /var/www/cgi-bin/test.pl line 38.
Aber Du kannst mir sicherlich sagen, was ich gegen diese Fehlermeldung konkret unternehmen muss?
Siehe perlsec
Ich hatte die Hoffnung, es würde reichen, den absoluten Pfad zur ausführbaren Datei anzugeben, aber scheinbar mag er da was anderes nicht.
Doch, $ENV{'PATH'} gefällt dem Taint-Modus nicht. Der ist nämlich reichlich paranoid, und das mit Recht. Wer garantiert Dir denn, dass das Programm, das Du startest, auch überall absolute Pfade benutzt? Richtig, niemand. Deswegen muß dafür gesorgt werden, dass nur "sichere" Verzeichnisse nach evtl. weiteren Kindprozessen durchsucht werden. Ähnliche Probleme werden noch einige weitere Variablen machen, aufgrund der Unart vieler externer Programme, andere Programme über die Shell zu starten.
Hier noch die Ausgabe beim Start via Webserver, wo er ebenfalls nicht terminiert:
ENV_PATH: /usr/local/bin:/bin:/usr/bin:/usr/lib/cgi-bin<br>
<HTML>
<HEAD><TITLE>Test</TITLE></HEAD>
<BODY>
<tt> ...1 ...2 ...3 ...4 ...5<h1>Software error:</h1><pre>Insecure $ENV{PATH} while running with -T switch at test.pl line 38.
Terminiert doch perfekt. ;-)
OK, der Kindprozess vom CGI vielleicht nicht, oder vielleicht bekommt es das CGI auch einfach nicht mit. Bist Du sicher, dass nach dem Ende des CGI-Prozesses der Kindprozess noch läuft?
Laß statt der dummen Zahlen mal eine aktuelle Prozessliste rausschreiben (ps -ef oder ps aux, je nach Betriebssystem).
Wenn der Kindprozess schnell wieder verschwindet, aber dein CGI weiterläuft, bekommt es vom Kindstod nichs mit.