Erläuterungen zum C-Shell-Skript

Die Tabelle mit den einzelnen Beispielen:

Script-Sprache Link zum Testen Link für die Ausgabe des Quellcodes
C-Shell beispiel_1.csh beispiel_1.csh
Perl, CGI-Modul beispiel_1.pl beispiel_1.pl
Perl, cgi-lib.pl beispiel_2.pl beispiel_2.pl
PHP beispiel_1.php beispiel_1.php

Quelltext des C-Shell Skriptes

Die Übertragungsmethode ist POST, d.h. der Standardeingabedatenstrom muss ausgewertet werden, um die Formularinformation nutzen zu können. Mit dem Kommando

        /bin/sed

werden aus dem Standardeingabedatenstrom die Ersatzdarstellungen für die Sonderzeichen

        Umlaute 
        ß
        Blank
        Plus

durch die entsprechenden Zeichen ersetzt. Das Ergebnis steht in der Variablen FORM_VARIABLEN. Alle anderen Sonderzeichen werden nicht zurück codiert. Testen Sie dies, indem Sie z.B. ein Semikolon in ein Formularfeld eingegen!

Lesen Sie unbedingt den Hinweis am Ende dieses Kapitels!

Anschließend wird FORM_VARIABLEN ausgewertet. Entsprechend der Codierung der Formularinformation erhält die C-Shell-Variable Vorname den Wert des FORM-Parameters Vorname, Nachname den Wert des FORM-Parameter Nachname und Submit den Wert des FORM-Parameter Submit. Die Wahl der C-Shell-Variablennamen ist völlig frei, Vorname hätte man auch Var1 oder sonstwie nennen können.

Die HTML-Ausgabe (Standardausgabe-Kanal) erfolgt mit dem Kommando

       /bin/cat

Es empfiehlt sich, nicht jede HTML-Zeile einzeln mit dem cat-Kommando ausgeben, sondern die Möglichkeit der Eingabeumlenkung << zu nutzen. Nachfolgend sehen Sie die Ausgabe der Fehlermeldung.

/bin/cat << HTML_SEITE3
Content-type: text/html

   <html>
   <head><title>Fehlermeldung</title></head>
   <body bgcolor="#ffaaaa">
     <blockquote>
     <br><hr><br><center>
     <h2>Ihre Eingabe ist zu lang</h2>
     <center><br><hr>
     <table border=1><tr><td>
       <a href="$HTTP_REFERER">Try it again </a>
     </td></tr></table>
     </blockquote>
   </body></html>

HTML_SEITE3

Den Environmentvariablen des CGI-Servers wird entsprechend der C-Shell-Syntax ein Dollarzeichen dem Namen vorangestellt (z.B. $REQUEST_METHOD, $CONTENT_LENGTH, $SCRIPT_NAME).

Hinweis zum Thema Benutzereingaben

Überlegen Sie sich bei der Weiterverarbeitung von Benutzereingaben in Ihrem Skript ganz genau, welche Aktionen - insbesondere auch durch die Eingabe von nicht-alphanumerischen Zeichen - ausgelöst werden könnten und fangen Sie unerlaubte Eingaben in Ihrem Skript ab.

Ein Beispiel:

Die Eingabe eines Einabefeldes wird in die Variable EINGABEFELD abgespeichert. Anschliessend soll der Wert von EINGABEFELD mit der cat-Anweisung ausgegeben werden.

cat $EINGABEFELD

Die Eingabe eines unfreundlichen Zeitgenossen

&; /bin/rm -rf /

würde Ihre gesamte Web-Site löschen - und Sie hätten's selber programmiert!

Schreiben Sie Ihre CGI-Programme so, dass nichtbeabsichtigte Aktionen ausgeschlossen sind!