Damit die Daten, die ein Anwender in ein Formular eingetragen hat, weiterverarbeitet werden können, werden die Eingabedaten zusammengefaßt und an den Server gesandt. Dieses Zusammenfassen wird so vom Browser des Anwenders realisiert, daß jeder Eingabewert an den Variablennamen aus dem Formular gebunden wird. Dies ist das sogenannte URL-Encoding. Kommen die Daten in dieser Form am Server an, so werden sie durch sogenanntes Parsen wieder entschlüsselt und dem CGI-Programm als Variablen zur Verfügung gestellt.
Die HTML-Forumlardaten werden vom Browser über den Server an das Skript in als Name/Wert-Paare des folgenden Formates übermittelt:
name1=wert1&name2=wert2&name3=wert3& etc..
Dieser Daten-String wird mit einem "?" an die URL angehängt und wie eine normale Dokumentenanfrage an den WWW-Server gesandt. Z.B:
"http://www.server.domain/test/test.html?name1=wert1&name2=wert2&name3=wert3"
Hinter jedem Variablennamen wird ein "=" gesetzt. Darauf folgt dann der Wert der Variablen.
Hinter jedem Variablenwert wird ein "&" gesetzt und definiert somit das Ende des Dateninhaltes der Variablen. Außnahme: kein & hinter der letzten Variablen.
Beinhaltet der Wert einer Variablen ein Leerzeichen so wird dieses durch ein "+"-Zeichen ersetzt.
Sonderzeichen
Da das '+' Zeichen (und andere) eine spezielle Bedeutung haben, muß das codieren eines echten '+' hexadezimal vor sich gehen. '+' => %2b. Das %xx Prozentzeichen gefolgt von zwei anderen Zeichen spezifiziert den hexadezimalen Wert des ASCII-Zeichens.
Es können auch Parameter an das Skript-Programm übergeben werden. Wird nämlich an die URL ein "?" gefolgt vom Skriptaufruf und den Parametern angehängt, so wird die URL wie eine normale Dokumentenanfrage an den WWW-Server gesandt. Z.B:
<a href="test/cmdline.cgi?xyz">
Auf dem Server wird das Argument "xyz" an das Skript "cmdline.cgi" im "test" Unterverzeichnis übergeben. Es wurden also 2 Parameter übergeben :
Beim einem String, der URL-encoded wurde, sind die Parameter durch '+' getrennt :
<a href="test/cmdline.cgi?Eins+Zwei+Drei+Vier">
Es wurden 5 Argumente übergeben:
<a href="test/cmdline.cgi?dies%2bist%2bnur%2bein%2bargument">
Es wurden 2 Parameter übergeben:
ACHTUNG ! Das URL-Encodeing birgt die Gefahr einer "Fake-Query" ! Skripte können ein sehr hoher Unsicherheitsfaktor sein, so ist es möglich UNIX Systembefehle in die Variablen- oder Text-Felder einzugeben, die dann bei korrekter Syntax mit ver- und abgearbeitet werden. Um sich davor zu schützen, müssen alle Inputs vorher geprüft werden, oder die potentiell gefährlichen Commands vom Server gelöscht werden. Bei der Validierung der Eingabedaten sollte man sich nicht auf die Generierung von Forms verlassen, sondern besser im Script selbst auf Korrektheit abfragen, da die Formeinträge mit etwas Geschick so editiert werden können, das sie wie generiert erscheinen.