Aktiven Inhalt, wie beispielsweise Skripts und ausführbare Dateien, in den Dokumentverzeichnissen des Webservers abzulegen, wird manchmal als unsichere Methode angesehen. Wenn, beispielsweise aufgrund von Konfigurationsfehlern, die Skripte nicht ausgeführt, sondern als reguläre HTML-Dokumente angezeigt werden, kann dies ein Durchsickern von geistigem Eigentum und sicherheitsrelevanter Informationen wie Passwörtern zur Folge haben. Deshalb ziehen es viele Systemadministratoren vor, eine zweite Verzeichnisstruktur für Skripte einzurichten, auf die nur durch das PHP-CGI zugegriffen werden kann. Diese werden dann stets interpretiert und nicht angezeigt.
Auch wenn die Methode zum sichergestellten Verhindern einer Umleitung von Anfragen (wie im vorangegangenen Abschnitt beschrieben) nicht verfügbar ist, ist es notwendig, ein doc_root für Skripte zusätzlich zum Web-Dokumentenverzeichnis einzurichten.
Sie können das PHP-Skriptverzeichnis durch die Direktive
doc_root in der
Konfigurationsdatei
festlegen, oder Sie setzen die Umgebungsvariable
PHP_DOCUMENT_ROOT. Wenn sie gesetzt ist, wird die
CGI-Version von PHP den Namen der zu öffnenden Datei
stets aus doc_root
und der Pfadinformation der
Anfrage zusammensetzen, sodass man sicher sein kann, dass außerhalb
dieses Verzeichnisses keine Skripte ausgeführt werden (außer
user_dir
, siehe unten).
Eine weitere hier nützliche Option ist user_dir. Wenn
user_dir
nicht gesetzt ist, hat nur
doc_root
Einfluss auf die zu öffnende Datei.
Der Aufruf einer URL wie http://my.host/~user/doc.php hat nicht zum
Ergebnis, dass eine Datei im Heimatverzeichnis des Benutzers geöffnet
wird, sondern eine Datei namens
~user/doc.php unterhalb von
doc_root
. (Ja, ein Verzeichnisname, der mit einer
Tilde anfängt [~
].)
Ist user_dir
beispielsweise auf
public_php gesetzt, wird eine Anfrage wie
http://my.host/~user/doc.php eine Datei
namens doc.php im Verzeichnis
public_php im Heimatverzeichnis des
Benutzers öffnen. Wenn das Heimatverzeichnis des Benutzers
/home/user ist, so ist die ausgeführte
Datei /home/user/public_php/doc.php.
Die user_dir
-Expansion erfolgt ohne Berücksichtigung
der doc_root
-Einstellung. So können Zugriffe
auf die Dokumenten- und Benutzerverzeichnisse separat gesteuert werden.