|
|
Zeile 12: |
Zeile 12: |
|
| |
|
| = TMP = | | = TMP = |
| Das '''Common Gateway Interface''' ('''CGI''') ist eine [[Schnittstelle]] für den [[Datenaustausch]] zwischen einem [[Webserver]] ([[Anwendungsprogramm]]) und dritter [[Software]], die [[Client-Server-Modell #Definitionen|Anfragen]] bearbeitet.<ref name="RFC" /> CGI ist eine Variante, [[Webseite]]n dynamisch bzw. [[interaktiv]] zu machen. Entwickelt wurde die Technologie am [[National Center for Supercomputing Applications]] (NCSA) und wird seit 1993 im [[World Wide Web]] eingesetzt.<ref name="RFC" /><ref name="History" />
| |
|
| |
| == Funktionsweise ==
| |
| Ausgehend von einer [[Hypertext Transfer Protocol|HTTP]]-Anfrage kann durch den Webserver via CGI ein Prozess gestartet werden. Dabei können Informationen als Parameter an den Prozess übergeben werden. Diese können beispielsweise auf Benutzereingaben aus einem [[Webformular]] beruhen. Die Ausgaben des Prozesses werden wiederum an den Webserver übergeben, der darauf basierend eine HTTP-Antwort erzeugen kann.<ref name="Walter_2008" /><ref name="Ionos" /> Optional können Daten bei laufenden Prozessen auch über die [[Standard-Datenströme]] zwischen Prozess und Webserver ausgetauscht werden.<ref name="Apache" />
| |
|
| |
| Zur Nutzung dieser Funktion stellen Webserver entsprechende [[Subroutine]]n, [[Programmbibliothek|Bibliotheken]], [[Skriptsprache|Skripte]] oder [[Computerprogramm|Programme]], sowie einige [[Umgebungsvariable]]n, zur Verfügung. Die folgenden neun Umgebungsvariablen müssen dabei verpflichtend vorhanden sein:<ref name="RFC" />
| |
| #<code>GATEWAY_INTERFACE</code>
| |
| #<code>QUERY_STRING</code>
| |
| #<code>REMOTE_ADDR</code>
| |
| #<code>REQUEST_METHOD</code>
| |
| #<code>SCRIPT_NAME</code>
| |
| #<code>SERVER_NAME</code>
| |
| #<code>SERVER_PORT</code>
| |
| #<code>SERVER_PROTOCOL</code>
| |
| #<code>SERVER_SOFTWARE</code>
| |
|
| |
| == Vorteile ==
| |
| Statt nur statische Seiten von einem Webserver zu laden, die dort als fertige [[Ressource #Informatik|Ressource]] zur Verfügung stehen, ist es mit CGI auch möglich, Webinhalte ([[Hypertext Markup Language|HTML]]-Seiten oder -Fragmente, [[Grafik]]en, [[Portable Document Format|PDF]]-Dokumente etc.) dynamisch zu erzeugen. D. h. diese müssen zur Zeit der Anfrage noch nicht auf dem Server existieren, sondern können vom CGI-Programm erzeugt werden.
| |
|
| |
| Grundsätzlich können CGI-Programme in einer beliebigen [[Programmiersprache]] geschrieben sein, die das Betriebssystem unterstützt, sofern die zuvor genannten Anforderungen erfüllt werden.<ref name="NCSA" />
| |
|
| |
| == Nachteile ==
| |
| Ein Nachteil der CGI-Ausführung ist neben dem Sicherheitsrisiko, sofern kein entsprechender Schutz eingerichtet ist, ihre relativ geringe Geschwindigkeit, da für jeden CGI-Aufruf ein neuer [[Prozess (Informatik)|Prozess]] gestartet wird. Zudem unterstützen viele Server nur eine limitierte Anzahl an CGI-Anfragen, weshalb viele Anfragen in [[Warteschlange (Datenstruktur)|Warteschlangen]] bleiben oder sogar abgewiesen werden.
| |
|
| |
| Alternativen, die auf CGI aufbauen, jedoch das [[Bootstrapping (Informatik)|Bootstrapping]] der Prozesse umgehen können, sind z. B. [[FastCGI]], [[Active Server Pages|ASP]], [[PHP]] und [[ColdFusion]].<ref name="Ionos" />
| |
|
| |
| Daneben gibt es [[Modul (Software)|Module]], z. B. für den [[Apache HTTP Server|Apache-Webserver]], die den [[Interpreter]] für verschiedene [[Scriptsprache]]n (z. B. [[mod_perl]] für [[Perl (Programmiersprache)|Perl]], [[mod_python]] für [[Python (Programmiersprache)|Python]] etc.) direkt in den Webserver-Prozess einbinden. Dieser wird so nur einmal beim Start des Webservers geladen, anstatt bei jeder Anfrage neu.
| |
| Die Programme weiterhin als externe Prozesse laufen zu lassen, ihnen die Anfragen jedoch per [[FastCGI]] zu übergeben, ist der Lösungsweg, der dem CGI-Prinzip am ehesten treu bleibt. Hierbei kann, anders als bei der o. g. Einbindung als Apache-Modul, nicht nur der Interpreter der Programmiersprache dauerhaft laufen. Auch die Anwendung selbst kann die ganze Zeit geladen bleiben und so die eingehenden Anfragen noch effizienter bearbeiten.
| |
|
| |
| == Sicherheit ==
| |
| Dass Programme, die ein Dritter erstellt hat, auf dem Webserver ausgeführt werden können, ist in höchstem Maße [[Informationssicherheit|sicherheits]]<nowiki />relevant. Daher muss sichergestellt sein, dass ein über CGI gestartetes Programm nur bestimmte, eingeschränkte Typen von [[Programmroutine]]n ausführen darf (z. B. kein Löschen von Dateien des Webservers u. ä.).
| |
|
| |
| Bei dem Apache-Webserver wird die Ausführung von CGI-Programmen mit Hilfe des Modules [[mod_suexec]] gegen solche [[Cracker (Computersicherheit)|Cracker-Angriffe]] gesichert, die das Eindringen als [[Root-Konto|Root-User]] zum Ziel haben. Die Sicherheitsmaßnahmen sind dabei mehrstufig aufgebaut und so streng, dass viele Server-[[Systemadministrator|Administratoren]] dazu übergegangen sind, auch andere serverseitige Sprachen über CGI laufen zu lassen.
| |
|
| |
| == Siehe auch == | | == Siehe auch == |
| * [[HTTP-Statuscode]] | | * [[HTTP-Statuscode]] |