Server Side Includes (SSI)

von Dr. Roland Hilkenbach, Netztrainer

Inhaltsverzeichnis

  1. Einleitung
  2. Was ist SSI?
  3. Konfiguration des Servers
  4. Programmierung mit SSI
  5. Ausführungsgeschwindigkeit und Serverbelastung
  6. Sicherheitsprobleme
  7. Troubleshooting
  8. Weitere Literatur
  9. Feedback

Einleitung

Für viele Zwecke reichen statische HTML-Seiten aus, aber gelegentlich benötigt man interaktive oder dynamische Elemente. Diese werden entweder vom Server oder vom Client bei Bedarf erzeugt und im HTML-Code dargestellt. Es gibt eine Vielzahl möglicher Techniken, um solche Elemente einzubinden, in diesem Abschnitt liegt das Augenmerk auf einer speziellen Technik: der serverseitigen Erzeugung von dynamischen Inhalten mit SSI.

Ziel dieses Beitrags

Angesprochenes Publikum

Dieser Beitrag wendet sich an

Vorkenntnisse

Für das Verständnis dieses Beitrags sind folgende Kenntnisse hilfreich:

Systemvoraussetzungen

Zum Ausprobieren der Beispiele und das Erstellen eigener SSI-Dateien benötigt man:

Was ist SSI?

Die SSI sind zwar keine universelle Programmiersprache, bieten aber acht mächtige Anweisungen mit etlichen Attributen zur Erzeugung dynamischer Webseiten. Dazu gehöhren:

SSI sind - wie der Name bereits andeutet - eine serverseitige Technik. Dies bedeutet, daß der Server bei der Anfrage nach einer HTML-Seite durch den Client den Inhalt der Seite, bzw. einen Teil davon erstellt. Was dabei genau passieren soll, hängt von den SSI-Direktiven in der HTML-Seite ab. Um die enthaltenen Kommandos ausführen zu können, muß der Server die HTML-Datei nach SSI-Direktiven durchsuchen, der Fachausdruck dafür lautet "parsen". Daher erhöhen HTML-Seiten mit SSI-Anweisungen die Belastung des Webservers.

Einsatzbereiche von SSI

Der Haupteinsatzbereich von SSI ist das Einbinden gemeinsamer oder dynamischer Elemente in mehrere HTML-Dokumente durch den Server, z.B. Kopf- und Fußzeilen, Banner, Navigationsleisten o.ä.. Diese Elemente müssen so nur einmal erstellt und gewartet werden und sind trotzdem auf allen Seiten in der aktuellen Fassung präsent. Dadurch kann der Einsatz von Frames und auch JavaScript vermieden werden, die im Zusammenhang mit Suchmaschinen zu Problemen führen können.

Eine weitere wichtige Anwendung von SSI ist das automatische Einbinden von Angaben zur letzten Aktualisierung oder zur Dateigröße, ohne Zutun des Webdesigners.

Vor- und Nachteile von SSI

Konfiguration des Servers

SSI zählt zwar eigentlich zur Basisfunktionalität eines Webservers, wegen des modularen Aufbaus des Apache-Webservers muß man jedoch darauf achten, daß die SSI-Komponenten auch zur Verfügung stehen. Damit der Server die SSI-Direktiven ausführt, müssen folgende Bedingungen gelten:

Bei den obigen Direktiven können übrigens auch andere Endungen angegeben werden, z.B. .shtm oder auch .html . Letztere Variante hätte allerdings den Nachteil, daß der Server alle HTML-Seiten auf SSI-Inhalte hin untersuchen müßte. Da dies den Server sehr belasten würde, wird von dieser Einstellung abgeraten. Ein Vorteil dieser Einstellung wäre jedoch, daß die dynamische Erstellung der Seiteninhaltevor Suchmaschinen und Besuchern verborgen würde.

Auf UNIX-Rechnern kann man mit einem Trick sowohl die Endung .html für SSI-haltige Seiten verwenden, als auch den Server schonen: Werden die HTML-Dateien mit SSI-Anteilen durch das "executable-Bit" gekennzeichnet, so kann die Direktive XBitHack on in der httpd.conf den Server anweisen, nur die Dateien, die als ausführbar gekennzeichnet sind, auf SSI-Anweisungen hin zu untersuchen. Das UNIX-Kommand chmod +x index.html setzt das "executable-Bit" für die Datei index.html, auch manche FTP-Clients ermöglichen das Setzen des x-Bits. Unter Windows funktioniert dieser Trick dagegen nicht.

Programmierung mit SSI

Um mit SSI programmieren zu können, muß man den Aufbau der SSI-Direktiven kennen, sie in den HTML-Quelltext integrieren können und einen Überblick über die Möglichkeiten von SSI haben. Die SSI-Direktiven stehen in dem HTML-Quellcode und werden vom Server beim Parsen der Datei entfernt und durch das Ergebnis der Befehlsausführung ersetzt, bevor das Ergebnis an den Client ausgeliefert wird. Der Client bekommt die SSI-Direktiven nicht zu sehen.

Aufbau von SSI-Direktiven

SSI-Direktiven sehen zunächst einmal aus, wie einfache HTML-Kommentare.

<!--#element attribut1="wert1" attribut2="wert2" ... -->

Für die Funktion der SSI-Anweisungen ist es wichtig, daß kein Leerschritt zwischen dem Kommentarbeginn (<!--) und dem Beginn der SSI-Anweisung (#element) steht! Die Attribute müssen in Anführungszeichen eingeschlossen sein. Zwischen dem letzten Attribut und dem Ende des Kommentars sollte ein Leerzeichen stehen.

Die SSI-Direktiven

Der Apache-Webserver kennt acht SSI-Direktiven:
#config
Konfiguration des Ausgabeformats für das Datum, Fehlermeldungen und für Dateigrößen.
#echo
Ausgabe von Texten und Variableninhalten
#endif
Ende einer #if bzw. #if-#else-Anweisung
#elif
Ende eines Zweigs einer #if-Anweisung und Beginn eines alternativen, wiederum von einer Bedingung abhängigen Zweigs. In anderen Programmiersprachen meist als else-if-Konstrukt bekannt und dort meist durch switch-case ersetzt.
#else
Beginn des alternativen Zweigs einer #if-Anweisung
#exec
Ausführen von Programmen auf dem Server. Wegen der damit verbundenen Sicherheitsrisiken wird diese Anweisung meist durch die Option IncludesNoExec deaktiviert.
#flastmod
Datum der letzten Änderung an der im Attribut genannten Datei
#fsize
Größe der im Attribut genannten Datei
#if
Bedingte Ausführung bzw. Ausgabe. Alles zwischen der #if und der #else bzw. #endif-Anweisung wird nur ausgeführt, wenn die im expr-Attribut genannte Bedingung zutrifft.
#include
Einbinden von Dateiinhalten aus separaten Quellen. Die Dateien können ihrerseits weitere SSI-Direktiven enthalten.
#printenv
Ausgabe aller Umgebungsvariablen
#set
Setzen einer Variablen auf einen bestimmten Wert

Ausführungsgeschwindigkeit und Serverbelastung

Eine SSI-Datei muss vom Server besonders behandelt werden: der gesamte Dateiinhalt ist auf SSI-Anweisungen hin zu untersuchen und die Anweisungen müssen ausgeführt werden. Dies kostet Zeit und belastet den Server. Bei der #include-Direktive kommen außerdem noch die Lesezugriffe auf den Datenträger hinzu: für jede eingebundene Datei muß der Server eine neue Datei öffnen. Je nach Auslastung des Systems kann das die Auslieferung des Ergebnisses stark verzögern. Beispiel: eine einzelne HTML-Datei - eine aus mehreren kleinen Dateien zusammengesetzte SSI-Datei. Vergleichen Sie die Zeit, bis Sie die Inhalte sehen.

Sicherheitsprobleme mit SSI

Wie jede serverseitig ausgeführte Programmiersprache birgt auch SSI einige Sicherheitsrisiken für den Server:

Troubleshooting

Existiert die Datei /usr/lib/apache/mod_include.so?

Stehen die folgenden Anweisungen in der /etc/httpd/httpd.conf?

Sind die Optionen für das Verzeichnis richtig gesetzt (Direktive in httpd.conf oder .htaccess)?

Ist die Dateiendung korrekt?

Wenn mit XBitHack gearbeitet wird, ist das x-Recht gesetzt?

Steht ein Leerzeichen zwischen <!-- und #element (Darf nicht sein!)?

Stehen die Werte für die Attribute in doppelten Anführungszeichen?

Steht ein Leerzeichen vor dem Ende der SSI-Anweisung (-->) (Hier sollte eins sein)?

Sagt das Fehlerprotokoll des Servers etwas über die Dateizugriffe aus?

Sollte die Ausführung der SSI-Anweisungen trotz korrekter Konfiguration des Servers nicht erfolgen, so ist eine Überprüfung des Fehlerprotokolls hilfreich: "premature end of script..." deutet auf fehlende Anführungszeichen hin, fehlt dagegen der Eintrag für den fehlerhaften Aufruf vollkommen, so deutet dies auf ein Leerzeichen zwischen <!--#element hin, da die SSI-Anweisung dann nicht als solche, sondern als HTML-Kommentar erkannt wird - und der wird bekanntlich ignoriert.

Weitere Literatur

Dokumentation zum mod_include
Rich Bowen: "Apache Guide: Introduction to Server Side Includes I, II und II", ApacheToday
Arne Pottharst und Team Ideenreich: Dr. Web
Sven Lennartz: "Dynamische Seiten", c't 20/2001
Stefan Münz: "SelfHTML"

Feedback

Diese Seite soll (noch) besser werden. Ich bitte Sie daher um die Beantwortung der folgenden Fragen:
Ist dieser Artikel verständlich geschrieben? sehr gut        sehr schwer
Ist dieser Artikel hilfreich für Sie? sehr        gar nicht
Möchten Sie Ihre EMail-Anschrift eingeben?
Haben Sie Fehler gefunden oder möchten Sie einfach einen Kommentar abgeben?
   

© 2001, 2002 by Dr. Roland Hilkenbach, www.netztrainer.de, Stand der Dinge: 11. 01. 2002