In diesem kurzen Artikel möchte ich zeigen, wie ich persönlich meine in PHP gebauten Projekte etwas absichere. Damit nicht die Möglichkeit besteht, dass die PHP-Dateien als Textdokumente vom Browser heruntergeladen werden können anstatt dass diese auf dem Server ausgeführt werden, gehe ich wie in diesem Artikel beschrieben vor. Dies könnte ansonsten z. B. dann passieren wenn der Webserver nicht korrekt arbeitet bzw. das PHP-Modul abschmiert
Alle PHP-Dateien verfrachte ich in einen Unterordner innerhalb des Projektes. Der Name dieses Ordners ist zweitrangig. Ich nenne diesen includes, weil dieser Ordnername allgemein gerne für die Skripte, die im Hintergrund für den eigentlichen Betrieb eines Projektes verantwortlich sind, verwendet wird.
Diesen Ordner sichert man dann per .htaccess-Datei ab. In diese muss folgender Inhalt, um jeglichen externen Zugriff durch den Webserver zu unterbinden:
1 2 3 |
# Zugriff beschränken Order deny,allow Deny from all |
In den Root-Ordner des Projektes kommt dann nur eine index.php-Datei, die den Inhalt der eigentlich benötigten Skripte „included“. Ich benutze dafür die Datei main.php im includes-Ordner, der Name ist aber nur Schall und Rauch:
1 2 |
<?php require_once "includes/main.php"; |
Die main.php arbeitet in meinem Projekt als sogenannter „Front-Controller“. Das heißt, dies ist die zentrale Datei, von der aus je nach aufgerufener Adresse die richtige Ausgabe an den Browser des Seitenbesuchers geliefert wird.
Zur Veranschaulichung des Ablaufs habe ich folgende Grafik erstellt:
Wie zu sehen ist, ist es nur noch für den PHP-Prozess möglich auf die Dateien im includes-Ordner zuzugreifen. Da diese Dateien nicht direkt aufgerufen werden müssen, weil die Kommunikation mit dem Seitenbesucher lediglich über den Front-Controller abläuft, besteht keine Notwendigkeit, dass die Dateien erreichbar sein müssen.
Natürlich schützt dies nur vor groben Fehlern bei der Webserver-Konfiguration. Wenn man seinen PHP-Code versaut und es dem Besucher durch einen Fehler ermöglicht wird eine PHP-Datei herunterzuladen schützt das natürlich nicht davor. Denn das PHP-Modul hat natürlich vollen Zugriff auf den Ordner um die anderen Skripte zu laden bzw. auszuführen.