open_basedir
open_basedir
string- Begrenzt die Dateien, auf die von PHP zugegriffen werden kann, auf einen bestimmten Ordner inklusive seiner Unterordner. Wenn ein Skript versucht, auf eine Datei zuzugreifen, zum Beispiel mit include oder fopen(), wird der Ort der Datei geprüft. Wenn die Datei nicht im Verzeichnisbaum liegt, der in open_basedir angegeben ist, wird PHP nicht auf die Datei zugreifen. Alle symbolischen Verknüpfungen werden aufgelöst, sodass es nicht möglich ist, diese Beschränkung mit einem Symlink zu umgehen. Wenn die Datei nicht existiert, kann die Verknüpfung nicht aufgelöst werden und der Dateiname wird mit (einem aufgelösten) open_basedir verglichen. open_basedir kann sich auf mehr als nur Dateisystemfunktionen auswirken. Wenn zum Beispiel
MySQL
so konfiguriert ist, dass es denmysqlnd
-Treiber verwendet, wirdLOAD DATA INFILE
von open_basedir beeinflusst. Ein Großteil der erweiterten Funktionalität von PHP verwendetopen_basedir
auf diese Weise. Der spezielle Wert.
gibt an, dass das Arbeitsverzeichnes des Skriptes als Basis-Verzeichnis verwendet wird. Dies ist gefährtlich, da das Arbeitsverzeichnis mit chdir() einfach geändert werden kann. In der Konfigurationsdatei httpd.conf kann open_basedir genau wie jede andere Direktive mit "php_admin_value open_basedir none
" geändert oder deaktiviert werden (z. B. für einige virtuelle Hosts). Unter Windows müssen die Verzeichnisse mit einem Semikolon getrennt werden, auf allen anderen Systemen mit einem Doppelpunkt. Wenn PHP als Apache-Modul läuft, erbt open_basedir seinen Pfad nun automatisch von übergeordneten Verzeichnissen. Die mit open_basedir angegebene Einschränkung ist ein Verzeichnisname, kein Präfix. Standardmäßig dürfen alle Dateien geöffnet werden.Hinweis: open_basedir kann zur Laufzeit weiter eingeschränkt werden. Das heißt, wenn open_basedir laut php.ini auf
/www/
gesetzt ist, kann die Direktive zur Laufzeit mit ini_set() beispielsweise weiter auf/www/tmp/
begrenzt werden. Wenn mehrere Verzeichnisse aufgelistet werden, kann die KonstantePATH_SEPARATOR
unabhängig vom Betriebssystem als Trennzeichen verwendet werden.
AchtungHinweis: Die Verwendung von open_basedir setzt realpath_cache_size auf
0
und deaktiviert somit den realpath-Cache.open_basedir
ist nur ein zusätzliches Sicherheitsnetz, das in keiner Weise umfassend ist und daher nicht als verlässlich angesehen werden kann, wenn Sicherheit erforderlich ist.