CGI
Das Common Gateway Interface (CGI) beschreibt Daten und Verfahren, mit denen ein Webserver die Ausführung eines Requests an ein externes Programm delegieren kann.[1] Bei diesem Programm kann es sich um ein Script (CGI-Script) oder ein kompiliertes Programm handeln. Die Requestdaten stehen dem CGI-Programm üblicherweise als Umgebungsvariablen zur Verfügung und können gezielt abgefragt werden:
- Perl: der Hash %ENV
- PHP: in den Arrays $_SERVER sowie $_POST, $_GET und $_COOKIE
- Python: das Dictionary os.environ
- C(++): mit der Funktion getenv
Die Daten setzen sich aus verschiedenen Quellen zusammen:
- allgemeine Informationen über den Webserver (Name, Serversoftware)
- allgemeine Informationen über das ausgeführte Script
- aufbereitete Informationen über den aktuellen Webrequest. Dazu gehören Kommunikationdaten, eine möglicherweise vorhandene Benutzerauthentifizierung und teilweise interpretierte Bestandteile der aufgerufenen URL.
CGI definiert einen Basissatz an Serverinformationen. Die tatsächlich vorhandenen Informationen können weitaus umfangreicher sein. Welche das sind, finden Sie in der Dokumentation zur verwendeten Webserver-Software.
CGI-Programme werden üblicherweise neben dem Document-Root in einem Verzeichnis namens cgi-bin
abgelegt. Sie müssen auf dem Server ausführbar sein, d.h. unter Unix/Linux/macOS das so genante x-Bit gesetzt haben. In Skript-Programmem muss zudem die erste Zeile als Shebang-Zeile den Pfad zum Interpreter enthalten.
Inhaltsverzeichnis
Request
Daten, die per GET übermittelt werden, sind Inhalt der Variablen QUERY_STRING. PHP (und einige andere Frameworks in verschiedenen Programmiersprachen) stellen diese Daten praktischerweise als Schlüssel-Wert-Paare zur Verfügung, so dass aus
?schluessel=wert&noch=etwas
so etwas wird wie
GET = { 'schluessel': 'wert', 'noch': 'etwas' }
name[]
, PHP erzeugt daraufhin unter dem Schlüssel "name"
ein Array mit einem Eintrag für jeden mit diesem Schlüssel übergebenen Wert.Daten, die per POST übermittelt werden, bekommt das CGI-Skript auf der Standardeingabe (STDIN). Die CGI-Variable CONTENT_LENGTH gibt dabei die Länge des Datenstroms an und CONTENT_TYPE den MIME-Type der Daten. Das Einlesen und Aufbereiten der POST-Daten wird Ihnen in Perl oder PHP ebenfalls abgenommen.
Response
Die Response des CGI-Programms muss eine gültige HTTP-Antwort und darf daher nicht leer sein. Neben dem HTTP-Statuscode ist das also die Angabe des Content-Type oder eine Weiterleitung mittels Location.
Die HTTP-Response-Header und der HTTP-Response-Body müssen durch eine Leerzeile voneinander getrennt sein.
Zugriffskontrolle
CGI-Programme können neben einer eigenen, benutzerdefinierten Zugriffskontrolle durch Senden und Verarbeiten entsprechender HTTP-Header, auch durch die Server-Konfiguration mittels HTTP Authentication geschützt werden, indem bei Verwendung des Apache-Webservers eine entsprechende .htaccess
im cgi-bin
-Verzeichnis abgelegt wird.[2]
Quelle
- ↑ RFC 3875 -- The Common Gateway Interface (CGI) Version 1.1
- ↑ SELFHTML-Forum: Passwortschutz (02.07.2001)