Was nicht ins Web gehört gehört nicht ins Web

Eine Webseite besteht normalerweise aus mehr als aus einer Datei. Da gibt es Bilder, Stylesheets, Javascript und natürlich HTML. Bei dynamische Seite werden die eingetlichen HTML-Dateien durch Skripte ersetzt - dafür kommen aber meist noch Konfigurationsdateien hinzu. Sobald eine Seite auch nur ein klein bisschen komplexer wird, tut man gut daran Programmcode in Klassen und HTML-Schnipsel in Templates auszulagern. Am Ende sind es unzählige Dateien, die alle irgendwo und irgendwie Verwendung finden. Um Ordnung zu halten und den Überblick nicht zu verlieren landen Bilder im Bilderordner, Templates im Templateordner, PHP-Klassen im Includeverzeichnis usw. Das macht natürlich Sinn, ich empfehle aber die Ordnerstruktur um eine Ebene zu erweitern.

Die Idee ist, nur diejenigen Dateien im Web zugänglich zu machen, die auch tatsächlich vom Browser heruntergeladen werden müssen. Das trifft sicherlich für (die meisten) Bilder, Stylesheets und überhaupt alle statischen Inhalte zu. Was auf jedenfall nicht zugänglich sein soll sind Konfigurationsdateien (in denen womöglich Datenbankpasswörter im Klartexte gespeichert sind), PHP-Klassen (die sowieso nichts ausgeben) und Templatedateien (die kein vollständiges und mit Platzhaltern gespicktes HTML enthalten). All diese Datein dürfen nicht durch einfaches erraten der URL über den Browser zugänglich gemacht werden. Selbstverständlich ist es möglich den Zugriff auf diese Dateien durch geschickte Regeln in der Konfiguration des Webservers (z.B. in der htaccess-Datei) zu unterbinden. Allerdings werden solche Regeln schnell kompliziert wenn die verbotenen Dateien über das ganze Projekt verstreut sind.

Der umgekehrte Weg: ausschließlich "Web-Dateien" auch über Web verfügbar zu machen ist viel einfacher (und sicherer). Dazu braucht es nur ein Verzeichnis - nennen wir es htdoc. Da kommen alle Bilder, Stylesheets und natürlich auch die index.php hinein. Außerhalb dieses Verzeichnis gibt es Ordner für PHP-Klassen, HTML-Templates, Konfigurationsdateien, Caches, Logdateien und was auch immer. Nun muss nur noch der Webserver so konfiguriert werden, dass das DOCUMENT_ROOT - um im Apache-Jargon zu sprechen - dieser Webseite auf das Verzeichnis htdoc zeigt. Damit sind alle Dateien außerhalb dieses Verzeichnisses für den Besucher der Webseite unerreichbar - ganz einfach dadurch, dass die Dateien die nicht ins Web gehören auch nicht im Web sind.

Natürlich erzähle ich damit nichts neues. Diese Methode wende nicht nur ich schon seit Jahren an. Was mich aber verblüfft (und enttäuscht), wie wenig dieses Prinzip bei all der Diskussion um Sicherheit angewandt wird. Zum einen ist es natürlich bedauerlich, dass es nicht Standard von Webhosting-Paketen geworden ist das DOCUMENT_ROOT in einen Unterordner zu verlegen. Tragischer finde ich, dass es so viele Webprojekte gibt (z.B. OpenSource CMSe), die diesen Grundsatz nicht befolgen. Wer also ein neues Projekt startet oder dabei ist eines zu verbessern sollte sich Gedanken darüber machen was ins Web gehört und was nicht.

6. Jul. 2009 (15:02) | gERD Schaufelberger

zur Liste

Suche

Aktuelle Artikel