CGI
|
|
[ Installation/Konfiguration ] [ Status/Info ] [ UserDir ] [ Virtuelle Hosts ] [ Authentifizierung ] [ CGI ] [ mod_perl ] [ PHP ] [ SSI ] [ SSL ] [ WebDAV ] [ Log-Dateien ] [ ht://Dig ]
CGI (Common Gateway Interface) ist eine
Kommunikationsschnittstelle zwischen den Server-Prozessen und dem Server
selbst. Dabei werden die Gateway-Programme (CGI-Programme) auf dem
Web-Server ausgeführt und liefern dynamische Daten als
HTML-Daten an den Browser
zurück. In den meisten Fällen reagieren ein CGI-Programme auf die
Anfragen von Benutzern, z.B. aus fest definierten Eingabemasken heraus.
Zur Erstellung
eines CGI-Programms gibt es keine spezielle Programmiersprache. Im einfachsten
Fall kann das Programm unter Unix ein Shell-Skript bzw. unter DOS eine
.bat-Datei
sein. Es können aber auch beliebige höhere Programmiersprachen wie 'C', 'Pascal'
usw. benutzt werden. Bei den Skript-Sprachen hat sich 'Perl' durchgesetzt.
Im Verlauf der Seite wird auf die CGI-Möglichkeiten vom Apache2-Server unter
Debian eingegangen, dabei wird kurz die notwendige Konfiguration vorgestellt.
Konfiguration
Im Prinzip gibt es zwei unterschiedliche Möglichkeiten um CGI-Programme
auf dem Apache-Server zu unterstützen:
Die erste
Möglichkeit besteht daraus, dass ein bestimmtes Verzeichnis und damit auch die darunter liegenden Verzeichnisse als
CGI-Verzeichnis deklariert
werden. In diesen
Verzeichnissen können dann keine normalen HTML-, Grafik- oder Textdateien
abgelegt werden. Der Apache-Server versucht bei Aufruf dieser
CGI-Dateien, diese als
Prozesse auf der Betriebssystemebene zu starten.
Die zweite Möglichkeit ist,
anstatt CGI-Scripte in bestimmten Verzeichnissen unterzubringen, kann Apache
solche Scripte auch an einer bestimmten Endung erkennen, unabhängig davon, in
welchem Verzeichnis sie sich befinden. Standardmäßig verwendet man für solche
Scripte die Endung '.cgi', es kann
aber auch
jede beliebige andere noch nicht vergebene Dateiendung konfiguriert werden.
In der Default-Konfiguration von Apache2 unter Debian ist die Verwendung von CGI
schon berücksichtigt, d.h. das entsprechende CGI-Modul : 'mod_cgi',
zum Ausführen von CGI-Programme ist vorhanden und auch aktiviert. (Das
Modul kann mit dem Kommando 'a2enmod cgi' aktiviert
werden.) Weiterhin muss das Verzeichnis 'cgi-bin'
existieren, sollte das nicht der Fall sein so kann dieses mit dem Kommando 'mkdir
/usr/lib/cgi-bin' nachgeholt werden.
Um die Einstellungen zu verdeutlichen, folgt eine kurze
Beschreibung der CGI relevanten Konfigurationen. In der default-Datei für den virtuellen Host: '/etc/apache2/sites-available/default'
ist bereits ein CGI-Bereich vorgesehen. Hierzu der entsprechende Auszug:
Auszug aus: /etc/apache2/sites-available/default |
NameVirtualHost *
<VirtualHost *>
...
ScriptAlias /cgi-bin/
/usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options
ExecCGI -MultiViews
+SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
...
</VirtualHost> |
Der CGI-Anteil wird mit dem Direktive: 'ScriptAlias'
eingeleitet, danach folget das CGI-Verzeichnis in diesem Fall: '/usr/lib/cgi-bin/',
indem die CGI-Scripte/Programme abgelegt werden können. Wichtig für den
CGI-Support ist die Option: 'ExecCGI', die das Ausführen von
CGI-Programmen
erlaubt.
Möchte man, wie oben als zweite Möglichkeit beschrieben,
CGI-Programme außerhalb des Verzeichnisses: '/cgi-bin/'
verwenden, so ist in der Hauptkonfigurationsdatei: 'apache2.conf' die folgende Zeile frei
zuschalten (gelbe Markierung):
Auszug aus: /etc/apache2/apache2.conf
(ca. Zeile: 341) |
...
# To use CGI scripts outside /cgi-bin/:
#
AddHandler cgi-script .cgi
... |
Mit der Aktivierung der Zeile werden nun Dateien, mit der Endung:
'.cgi', als
CGI-Programm ausgeführt.
Weiterhin ist in den Verzeichnissen die entsprechende Option: '+EcecCGI'
zu setzen. Soll z.B. in alle Verzeichnisse unterhalb: '/var/www/'
das Ausführen von *.cgi-Dateien möglich
sein, so ist die Option zu erweitern:
Auszug aus: /etc/apache2/sites-available/default |
NameVirtualHost *
<VirtualHost *>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
+ExecCGI
AllowOverride None
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
RedirectMatch ^/$ /apache2-default/
</Directory>
... |
Anmerkungen
Zum Test der CGI-Fähigkeit des Apache-Servers kann folgendes
kleines CGI-Testprogramm in Unix-Shell genutzt werden:
CGI-Testprogramm: cgi-test.cgi |
#!/bin/sh
# disable filename globbing
set -f
echo Content-type: text/plain
echo
echo CGI/1.0 test script report:
echo
echo argc is $#. argv is "$*".
echo
echo SERVER_SOFTWARE = $SERVER_SOFTWARE
echo SERVER_NAME = $SERVER_NAME
echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE
echo SERVER_PROTOCOL = $SERVER_PROTOCOL
echo SERVER_PORT = $SERVER_PORT
echo REQUEST_METHOD = $REQUEST_METHOD
echo HTTP_ACCEPT = "$HTTP_ACCEPT"
echo PATH_INFO = "$PATH_INFO"
echo PATH_TRANSLATED = "$PATH_TRANSLATED"
echo SCRIPT_NAME = "$SCRIPT_NAME"
echo QUERY_STRING = "$QUERY_STRING"
echo REMOTE_HOST = $REMOTE_HOST
echo REMOTE_ADDR = $REMOTE_ADDR
echo REMOTE_USER = $REMOTE_USER
echo AUTH_TYPE = $AUTH_TYPE
echo CONTENT_TYPE = $CONTENT_TYPE
echo CONTENT_LENGTH = $CONTENT_LENGTH |
Das Programm sollte auf dem Server, z.B. in das Verzeichnis:
'/usr/lib/cgi-bin', abgelegt werden.
Weiterhin ist darauf zu achten, dass das Programm mit den notwendigen
Datei-Rechte versehen
ist. Durch Aufruf mittels Browser: 'http://<localhost>/cgi-bin/cgi-test.cgi?Hello
World'
sollte es ausgeführt werden und relevante Informationen über den Server
ausgeben.
Weitere CGI-Testprogramme sind, sofern die 'apache2-doc'
installiert wurde, unter: '/usr/share/doc/apache2-doc/cgi-examples'
zu finden.
Die Installation von CGI-Programmen ist zwar recht einfach, es
sollte jedoch dabei immer bedacht werden, dass durch kleine Fehler zum Teil
riesige Sicherheitslücke geschaffen werden. Um ein
CGI-Programm zu installieren,
müssen diese lediglich ins /cgi-Verzeichnis des Servers kopieren
werden. Weiterhin ist dafür zu sorgen, dass diese ausführbar sind ('chmod
755 *.cgi'). Außerdem ist die Endung: '.cgi'
zu verwendet,
sofern in der Serverkonfiguration nicht noch andere Endungen für
CGI-Programme
eingetragen sind.
Des weiteren sollten einige Sicherheitsaspekte nicht außer
Acht gelassen werden:
-
Das CGI-Skript sollte dem selben User gehören, mit dessen
Rechten auch der Apache-Server läuft.
-
Im Verzeichnis: '/cgi-bin/' gehören nur CGI's.
Es sollten dort auf
keinen Fall andere Programme und auch nicht Daten der
CGI-Programme, wie
z.B. Gästebücher speichert werden.
-
In den CGI-Programmen sollten möglichst keine
externen Unix-Programme aufgerufen werden.
-
Es sollten am besten bereits vorhandene bewährte
CGI-Programme genutzt werden, anstatt eigne zu schreiben. Das geht nicht nur schneller, sondern
ist, auch zum Teil sicherer.
Weitere Infos
[ Home ] [ Nach oben ] [ Installation/Konfiguration ] [ Status/Info ] [ UserDir ] [ Virtuelle Hosts ] [ Authentifizierung ] [ CGI ] [ mod_perl ] [ PHP ] [ SSI ] [ SSL ] [ WebDAV ] [ Log-Dateien ] [ ht://Dig ]
letzte Änderung:
11. September 2007 |