Open basedir: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
'''open_basedir''' - Begrenzt die Dateien, auf die von PHP zugegriffen werden kann | |||
== Beschreibung == | |||
; <code>open_basedir</code> ''string'' | ; <code>open_basedir</code> ''string'' | ||
Zeile 8: | Zeile 9: | ||
Wenn ein Skript versucht, auf eine Datei zuzugreifen, zum Beispiel mit include oder fopen(), wird der Ort der Datei geprüft. | 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. | * 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. | * 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 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 <code>MySQL</code> so konfiguriert ist, dass es den <code>mysqlnd</code>-Treiber verwendet, wird <code>LOAD DATA INFILE</code> von '''open_basedir''' beeinflusst. | * Wenn zum Beispiel <code>MySQL</code> so konfiguriert ist, dass es den <code>mysqlnd</code>-Treiber verwendet, wird <code>LOAD DATA INFILE</code> von '''open_basedir''' beeinflusst. | ||
* Ein Großteil der erweiterten Funktionalität von PHP verwendet <code>open_basedir</code> auf diese Weise. | * Ein Großteil der erweiterten Funktionalität von PHP verwendet <code>open_basedir</code> auf diese Weise. | ||
* Der spezielle Wert <code>.</code> gibt an, dass das | * Der spezielle Wert <code>.</code> gibt an, dass das Arbeitsverzeichnis des Skriptes als Basis-Verzeichnis verwendet wird. | ||
* Dies ist | * Dies ist gefährlich, da das Arbeitsverzeichnis mit chdir() einfach geändert werden kann. | ||
* In der Konfigurationsdatei <var>httpd.conf</var> kann '''open_basedir''' genau wie jede andere Direktive mit "<code>php_admin_value open_basedir none</code>" geändert oder deaktiviert werden (z. B. für einige virtuelle Hosts). | * In der Konfigurationsdatei <var>[[httpd.conf]]</var> kann '''open_basedir''' genau wie jede andere Direktive mit "<code>php_admin_value open_basedir none</code>" 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. | * 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. | * Wenn PHP als Apache-Modul läuft, erbt '''open_basedir''' seinen Pfad nun automatisch von übergeordneten Verzeichnissen. | ||
Zeile 21: | Zeile 22: | ||
* Das heißt, wenn open_basedir laut <var>php.ini</var> auf <code>/www/</code> gesetzt ist, kann die Direktive zur Laufzeit mit ini_set() beispielsweise weiter auf <code>/www/tmp/</code> begrenzt werden. | * Das heißt, wenn open_basedir laut <var>php.ini</var> auf <code>/www/</code> gesetzt ist, kann die Direktive zur Laufzeit mit ini_set() beispielsweise weiter auf <code>/www/tmp/</code> begrenzt werden. | ||
* Wenn mehrere Verzeichnisse aufgelistet werden, kann die Konstante '''<code>PATH_SEPARATOR</code>''' unabhängig vom Betriebssystem als Trennzeichen verwendet werden.</blockquote><blockquote>'''Hinweis''': Die Verwendung von open_basedir setzt realpath_cache_size auf <code>0</code> und ''deaktiviert'' somit den realpath-Cache.</blockquote>'''Achtung''' <code>open_basedir</code> 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. | * Wenn mehrere Verzeichnisse aufgelistet werden, kann die Konstante '''<code>PATH_SEPARATOR</code>''' unabhängig vom Betriebssystem als Trennzeichen verwendet werden.</blockquote><blockquote>'''Hinweis''': Die Verwendung von open_basedir setzt realpath_cache_size auf <code>0</code> und ''deaktiviert'' somit den realpath-Cache.</blockquote>'''Achtung''' <code>open_basedir</code> 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. | ||
<noinclude> | |||
== Anhang == | |||
=== Siehe auch === | |||
{{Special:PrefixIndex/{{BASEPAGENAME}}}} | |||
==== Links ==== | |||
===== Weblinks ===== | |||
[[Kategorie:PHP]] | [[Kategorie:PHP]] | ||
{{DEFAULTSORT:open_basedir}} | {{DEFAULTSORT:open_basedir}} | ||
{{DISPLAYTITLE:open_basedir}} | |||
</noinclude> |
Aktuelle Version vom 17. April 2024, 13:39 Uhr
open_basedir - Begrenzt die Dateien, auf die von PHP zugegriffen werden kann
Beschreibung
open_basedir
string
Begrenzt die Dateien, auf die von PHP zugegriffen werden kann
- Ordner inklusive 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 verwendet
open_basedir
auf diese Weise. - Der spezielle Wert
.
gibt an, dass das Arbeitsverzeichnis des Skriptes als Basis-Verzeichnis verwendet wird. - Dies ist gefährlich, 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 Konstante
PATH_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.
Anhang
Siehe auch
Links
Weblinks