Zum Inhalt springen

„Common Gateway Interface“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[ungesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Herzmut (Diskussion | Beiträge)
Nachteile: Baustein-Bearbeitungen, Baustein entfernt
Unbelegte, wertende Aussage entfernt / Funktionsweise wurde nicht erklärt / nicht nur HTML; es können auch andere Dateiformate dynamisch erzeugt werden (z. B. PDF-Rechnungen) / Quellen hinzugefügt und überarbeitet / Kleinigkeiten (u. a.   nicht vor Abkürzungen) / Baustein "Belege fehlen" eingefügt: die Abschnitte "Vorteile", "Nachteile" und "Sicherheit" sind weitestgehend unbelegt
Zeile 1: Zeile 1:
{{Belege fehlen}}
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 [[Webseite #Dynamische Webseiten|dynamisch]] bzw. [[interaktiv]] zu machen. Die erste Nutzung im [[World Wide Web]] war im Jahr&nbsp;1993.
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 ==
== 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" />
Ein Webserver mit CGI stellt entsprechenden [[Subroutine]]n, [[Programmbibliothek|Bibliothek]]en, [[Skriptsprache|Scripts]] oder [[Computerprogramm|Programm]]en einige [[Umgebungsvariable]]n zur Verfügung. Zwingend existieren diese neun Umgebungsvariablen:

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>GATEWAY_INTERFACE</code>
#<code>QUERY_STRING</code>
#<code>QUERY_STRING</code>
Zeile 12: Zeile 15:
#<code>SERVER_PROTOCOL</code>
#<code>SERVER_PROTOCOL</code>
#<code>SERVER_SOFTWARE</code>
#<code>SERVER_SOFTWARE</code>
Der Webserver setzt [[Hypertext Transfer Protocol|HTTP]] auf CGI um, startet die entsprechende Software und setzt letztlich umgekehrt von CGI in HTTP um.

Optional stellt die Spezifikation frei anders als per [[Standardeingabe]] und Standardausgabe zu kommunizieren.


== Vorteile ==
== Vorteile ==
Statt nur statische Seiten von einem Webserver zu laden, die dort als fertige [[Ressource #Informatik|Ressource]] zur Verfügung stehen, ist es mit&nbsp;CGI auch möglich, HTML-Seiten dynamisch zu erzeugen. D.&nbsp;h. diese müssen zur Zeit der Anfrage noch nicht auf dem Server existieren, sondern können vom CGI-Programm erzeugt werden.
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.&nbsp;h. diese müssen zur Zeit der Anfrage noch nicht auf dem Server existieren, sondern können vom CGI-Programm erzeugt werden.


Außerdem können CGI-Programme in jeder [[Programmiersprache]] geschrieben sein, die das Betriebssystem unterstützt, da die Anforderungen nicht über&nbsp;o.&nbsp;g. hinausgehen.<ref name="NCSA" />
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 ==
== 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)|Warteschlange]]n bleiben oder sogar abgewiesen werden.
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)|Warteschlange]]n bleiben oder sogar abgewiesen werden.


Alternativen, die auf&nbsp;CGI aufbauen, jedoch das Bootstrapping der Prozesse umgehen können, sind z.&nbsp;B. [[FastCGI]], [[Active Server Pages|ASP]], [[PHP]] (welches in neueren Versionen ''FastCGI'' verwendet) und [[ColdFusion]].<ref>{{Internetquelle |url=https://www.ionos.de/digitalguide/websites/web-entwicklung/was-ist-ein-cgi/ |titel=Was ist ein CGI? |sprache=de |abruf=2022-02-16}}</ref>
Alternativen, die auf CGI aufbauen, jedoch das [[Bootstrapping (Informatik)|Bootstrapping]] der Prozesse umgehen können, sind z.&nbsp;B. [[FastCGI]], [[Active Server Pages|ASP]], [[PHP]] und [[ColdFusion]].<ref name="Ionos" />

Daneben gibt es [[Modul (Software)|Modul]]e, z.&nbsp;B. für den [[Apache HTTP Server|Apache-Webserver]], die den [[Interpreter]] für verschiedene [[Scriptsprache]]n (z.&nbsp;B. [[mod&#95;perl]] für [[Perl (Programmiersprache)|Perl]], [[mod&#95;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. Doch auch diese Ausführung bringt Nachteile mit sich, etwa weil die Verlässlichkeit des Servers sich durch zusätzliche, teilweise separat vom Server gepflegte Module, verringern kann.


Daneben gibt es [[Modul (Software)|Module]], z.&nbsp;B. für den [[Apache HTTP Server|Apache-Webserver]], die den [[Interpreter]] für verschiedene [[Scriptsprache]]n (z.&nbsp;B. [[mod&#95;perl]] für [[Perl (Programmiersprache)|Perl]], [[mod&#95;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.&nbsp;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.
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.&nbsp;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 ==
== 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&nbsp;CGI gestartetes Programm nur bestimmte, eingeschränkte Typen von [[Programmroutine]]n ausführen darf (z.&nbsp;B. kein Löschen von Dateien des Webservers u.&nbsp;ä.).
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.&nbsp;B. kein Löschen von Dateien des Webservers u.&nbsp;ä.).


Bei dem Apache-Webserver wird die Ausführung von CGI-Programmen mit Hilfe des Modules [[mod&#95;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&nbsp;CGI laufen zu lassen.
Bei dem Apache-Webserver wird die Ausführung von CGI-Programmen mit Hilfe des Modules [[mod&#95;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 ==
Zeile 52: Zeile 51:


== Weblinks ==
== Weblinks ==
* [http://wiki.selfhtml.org/wiki/Glossar:CGI ''Glossar:CGI''] im [[SELFHTML]]-Wiki
* [https://wiki.selfhtml.org/wiki/Glossar:CGI ''Glossar:CGI''] im [[SELFHTML]]-Wiki


== Einzelnachweise ==
== Einzelnachweise ==
<references>
<references>
<ref name="RFC">{{Internetquelle |url=https://www.rfc-editor.org/rfc/rfc3875 |titel=The Common Gateway Interface (CGI) Version 1.1 |titelerg=RFC 3875 |hrsg=[[Internet Society]] |datum=2004-10 |abruf=2022-10-23}}</ref>
<ref name="RFC">{{Internetquelle |autor = David Robinson, Ken Coar |url=https://www.rfc-editor.org/rfc/rfc3875 |titel=The Common Gateway Interface (CGI) Version 1.1 |titelerg=RFC 3875 |hrsg=[[Internet Society]] |datum=2004-10 |sprache=en |abruf=2022-10-23}}</ref>
<ref name="History">{{Internetquelle |autor=Richard MacManus |url=https://webdevelopmenthistory.com/1993-cgi-scripts-and-early-server-side-web-programming/ |titel=1993: CGI Scripts and Early Server-Side Web Programming |werk=webdevelopmenthistory.com |datum=2021-03-24 |sprache=en |abruf=2023-06-09}}</ref>
<ref name="NCSA">{{Internetquelle |titel=Common Gateway Interface |hrsg=[[National Center for Supercomputing Applications]] |archiv-datum=2009-04-09 |archiv-url=https://web.archive.org/web/20090409213905/http://hoohoo.ncsa.uiuc.edu/cgi/intro.html |url=http://hoohoo.ncsa.uiuc.edu/cgi/intro.html |abruf=2022-10-24}}</ref>
<ref name="NCSA">{{Internetquelle |url=http://hoohoo.ncsa.uiuc.edu/cgi/intro.html |titel=Common Gateway Interface |hrsg=[[National Center for Supercomputing Applications]] |sprache=en |archiv-datum=2009-04-09 |archiv-url=https://web.archive.org/web/20090409213905/http://hoohoo.ncsa.uiuc.edu/cgi/intro.html |abruf=2022-10-24}}</ref>
<ref name="Ionos">{{Internetquelle |url=https://www.ionos.de/digitalguide/websites/web-entwicklung/was-ist-ein-cgi/ |titel=Was ist ein CGI? |werk=ionos.de |datum=2020-03-20 |sprache=de |abruf=2022-02-16}}</ref>
<ref name="Walter_2008">{{BibISBN|9783540331346|Kapitel=CGI: das Common Gateway Interface|Seiten=113–123}}</ref>
<ref name="Apache">{{Internetquelle |url=https://httpd.apache.org/docs/2.4/howto/cgi.html |titel=Apache Tutorial: Dynamic Content with CGI |titelerg=Apache HTTP Server Version 2.4 |werk=httpd.apache.org |sprache=en |abruf=2023-06-09}}</ref>
</references>
</references>



Version vom 10. Juni 2023, 14:32 Uhr

Das Common Gateway Interface (CGI) ist eine Schnittstelle für den Datenaustausch zwischen einem Webserver (Anwendungsprogramm) und dritter Software, die Anfragen bearbeitet.[1] CGI ist eine Variante, Webseiten 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.[1][2]

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.[3][4] Optional können Daten bei laufenden Prozessen auch über die Standard-Datenströme zwischen Prozess und Webserver ausgetauscht werden.[5]

Zur Nutzung dieser Funktion stellen Webserver entsprechende Subroutinen, Bibliotheken, Skripte oder Programme, sowie einige Umgebungsvariablen, zur Verfügung. Die folgenden neun Umgebungsvariablen müssen dabei verpflichtend vorhanden sein:[1]

  1. GATEWAY_INTERFACE
  2. QUERY_STRING
  3. REMOTE_ADDR
  4. REQUEST_METHOD
  5. SCRIPT_NAME
  6. SERVER_NAME
  7. SERVER_PORT
  8. SERVER_PROTOCOL
  9. 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.[6]

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.[4]

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.

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. 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-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.

Siehe auch

Weitere serverseitige Technologien

Einzelnachweise

  1. a b c David Robinson, Ken Coar: The Common Gateway Interface (CGI) Version 1.1. RFC 3875. Internet Society, Oktober 2004, abgerufen am 23. Oktober 2022 (englisch).
  2. Richard MacManus: 1993: CGI Scripts and Early Server-Side Web Programming. In: webdevelopmenthistory.com. 24. März 2021, abgerufen am 9. Juni 2023 (englisch).
  3. Thomas Walter: Kompendium der Web-Programmierung. 1. Auflage. Springer, Berlin 2008, ISBN 978-3-540-33134-6, CGI: das Common Gateway Interface, S. 113–123, doi:10.1007/978-3-540-33135-3.
  4. a b Was ist ein CGI? In: ionos.de. 20. März 2020, abgerufen am 16. Februar 2022.
  5. Apache Tutorial: Dynamic Content with CGI. Apache HTTP Server Version 2.4. In: httpd.apache.org. Abgerufen am 9. Juni 2023 (englisch).
  6. Common Gateway Interface. National Center for Supercomputing Applications, archiviert vom Original am 9. April 2009; abgerufen am 24. Oktober 2022 (englisch).