Common Gateway Interface: Unterschied zwischen den Versionen

Aus Foxwiki
 
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''Common Gateway Interface''' - Kurzbeschreibung
'''Common Gateway Interface''' - [[Schnittstelle]] für den [[Datenaustausch]] zwischen einem [[Webserver]] und dritter [[Software]]


== Beschreibung ==
== Beschreibung ==
Zeile 15: Zeile 15:
Zur Nutzung dieser Funktion stellen Webserver entsprechende [[Subroutine]]n, [[Programmbibliothek|Bibliotheken]], [[Skriptsprache|Skripte]] oder [[Computerprogramm|Programme]], sowie einige [[Umgebungsvariable]]n, zur Verfügung
Zur Nutzung dieser Funktion stellen Webserver entsprechende [[Subroutine]]n, [[Programmbibliothek|Bibliotheken]], [[Skriptsprache|Skripte]] oder [[Computerprogramm|Programme]], sowie einige [[Umgebungsvariable]]n, zur Verfügung


; Obligatorische Umgebungsvariablen
{| class="wikitable options float"
{| class="wikitable options big"
|+ '''Umgebungsvariablen'''
|-
|-
! Umgebungsvariable !! Beschreibung
! Umgebungsvariable !! Beschreibung
Zeile 49: Zeile 49:
* Zudem unterstützen viele Server nur eine limitierte Anzahl an CGI-Anfragen, weshalb viele Anfragen in [[Warteschlange (Datenstruktur)|Warteschlangen]] bleiben oder sogar abgewiesen werden
* 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]]
Alternativen, die auf CGI aufbauen, jedoch das [[Bootstrapping|Bootstrapping]] der Prozesse umgehen können, sind z. B. [[FastCGI]], [[Active Server Pages|ASP]], [[PHP]] und [[ColdFusion]]


Daneben gibt es [[Modul (Software)|Module]], z. B.&nbspfü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
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
* 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
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
* 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
* Auch die Anwendung selbst kann die ganze Zeit geladen bleiben und so die eingehenden Anfragen noch effizienter bearbeiten
== Anwendung ==
Sie können eine <code>.htaccess-Datei</code> verwenden, um die Ausführung von CGI-Programmen in einem bestimmten Verzeichnis zu erlauben.
Dies lässt sich mit der folgenden Konfiguration realisieren:
Options +ExecCGI
AddHandler cgi-script cgi pl
Wenn Sie möchten, dass alle Dateien in dem angegebenen Verzeichnis als CGI-Programme betrachtet werden, können Sie dies alternativ mit der folgenden Konfiguration erreichen:
Options +ExecCGI
SetHandler cgi-script
Beachten Sie, dass <code>AllowOverride Options</code> und <code>AllowOverride FileInfo</code> beide in Kraft sein müssen, damit diese Direktiven eine Wirkung haben.
Im CGI-Tutorial finden Sie eine ausführlichere Beschreibung der CGI-Programmierung und -Konfiguration.


== Sicherheit ==
== Sicherheit ==

Aktuelle Version vom 3. November 2024, 11:14 Uhr

Common Gateway Interface - Schnittstelle für den Datenaustausch zwischen einem Webserver und dritter Software

Beschreibung

Das Common Gateway Interface (CGI) ist eine Schnittstelle für den Datenaustausch zwischen einem Webserver (Anwendungsprogramm) und dritter Software, die Anfragen bearbeitet

Funktionsweise

Ausgehend von einer 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
  • Optional können Daten bei laufenden Prozessen auch über die Standard-Datenströme zwischen Prozess und Webserver ausgetauscht werden

Zur Nutzung dieser Funktion stellen Webserver entsprechende Subroutinen, Bibliotheken, Skripte oder Programme, sowie einige Umgebungsvariablen, zur Verfügung

Umgebungsvariablen
Umgebungsvariable Beschreibung
GATEWAY_INTERFACE
QUERY_STRING
REMOTE_ADDR
REQUEST_METHOD
SCRIPT_NAME
SERVER_NAME
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE

Vorteile

Statt nur statische Seiten von einem Webserver zu laden, die dort als fertige Ressource zur Verfügung stehen, ist es mit CGI auch möglich, Webinhalte (HTML-Seiten oder -Fragmente, Grafiken, 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

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 gestartet wird

  • Zudem unterstützen viele Server nur eine limitierte Anzahl an CGI-Anfragen, weshalb viele Anfragen in Warteschlangen bleiben oder sogar abgewiesen werden

Alternativen, die auf CGI aufbauen, jedoch das Bootstrapping der Prozesse umgehen können, sind z. B. FastCGI, ASP, PHP und ColdFusion

Daneben gibt es Module, z. B. für den Apache-Webserver, die den Interpreter für verschiedene Scriptsprachen (z. B. mod_perl für Perl, mod_python für 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

Anwendung

Sie können eine .htaccess-Datei verwenden, um die Ausführung von CGI-Programmen in einem bestimmten Verzeichnis zu erlauben.

Dies lässt sich mit der folgenden Konfiguration realisieren:

Options +ExecCGI
AddHandler cgi-script cgi pl

Wenn Sie möchten, dass alle Dateien in dem angegebenen Verzeichnis als CGI-Programme betrachtet werden, können Sie dies alternativ mit der folgenden Konfiguration erreichen:

Options +ExecCGI
SetHandler cgi-script

Beachten Sie, dass AllowOverride Options und AllowOverride FileInfo beide in Kraft sein müssen, damit diese Direktiven eine Wirkung haben.

Im CGI-Tutorial finden Sie eine ausführlichere Beschreibung der CGI-Programmierung und -Konfiguration.

Sicherheit

Dass Programme, die ein Dritter erstellt hat, auf dem Webserver ausgeführt werden können, ist in höchstem Maße sicherheitsrelevant

  • Daher muss sichergestellt sein, dass ein über CGI gestartetes Programm nur bestimmte, eingeschränkte Typen von Programmroutinen ausführen darf (z. B.&nbspkein 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-Angriffe gesichert, die das Eindringen als Root-User zum Ziel haben

  • Die Sicherheitsmaßnahmen sind dabei mehrstufig aufgebaut und so streng, dass viele Server-Administratoren dazu übergegangen sind, auch andere serverseitige Sprachen über CGI laufen zu lassen

Weitere serverseitige Technologien

Option Beschreibung
FastCGI
Simple Common Gateway Interface (SCGI)
Servlet
Active Server Pages (ASP)
ASP.NET
ColdFusion
JavaServer Pages (JSP)
PHP
Node.js
Server Side Includes (SSI)


Anhang

Siehe auch


Links

Weblinks
  1. https://de.wikipedia.org/wiki/Common_Gateway_Interface
  2. Glossar:CGI. SELFHTML-Wiki