| Manual PHP Documentation |
| Manuál PHP | ||
|---|---|---|
| Předcházející | Další | |
Bezpečný režim PHP je pokus o řešení bezpečnosti sdílených serverů. Je architekturálně nekorektní pokoušet se řešit tento problém na úrovni PHP, ale protože řešení na úrovni webovského serveru a operačního systému nejsou příliš realistická, mnoho lidí, zvlaště ISP, používá nyní bezpečný režim.
Konfigurační direktivy, které ovládají bezpečný režim:
safe_mode = Off open_basedir = safe_mode_exec_dir = safe_mode_allowed_env_vars = PHP_ safe_mode_protected_env_vars = LD_LIBRARY_PATH disable_functions = |
Pokud je safe_mode zapnutý, PHP kontroluje, je-li vlastník běžícího skriptu vlastníkem souboru, s nímž se má manipulovat. Například:
-rw-rw-r-- 1 rasmus rasmus 33 Jul 1 19:20 script.php -rw-r--r-- 1 root root 1116 May 26 18:01 /etc/passwd |
<?php |
Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2 |
Pokud namísto safe_mode nastavíte adresář open_basedir, potom všechny operace se soubory budou omezeny pod specifikovaný adresář. Například (příklad Apache httpd.conf):
<Directory /docroot> php_admin_value open_basedir /docroot </Directory> |
Warning: open_basedir restriction in effect. File is in wrong directory in /docroot/script.php on line 2 |
Můžete také vypnout jednotlivé funkce. Pokud přidáme toto do souboru php.ini:
disable_functions readfile,system |
Warning: readfile() has been disabled for security reasons in /docroot/script.php on line 2 |
Toto je pravděpodobně neúplný a možná nesprávný přehled funkcí omezených v bezpečném režimu.
Tabulka 42-1. Funkce omezené v bezpečném režimu
| Funkce | Omezení |
|---|---|
| dbmopen() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. |
| dbase_open() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. |
| filepro() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. |
| filepro_rowcount() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. |
| filepro_retrieve() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. |
| ifx_*() | sql_safe_mode restrictions, (!= safe mode) |
| ingres_*() | sql_safe_mode restrictions, (!= safe mode) |
| mysql_*() | sql_safe_mode restrictions, (!= safe mode) |
| pg_loimport() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. |
| posix_mkfifo() | Kontroluje, zda adresář, ve kterém pracujete, má stejné UID jako spuštěný skript. |
| putenv() | Obeys the safe_mode_protected_env_vars and safe_mode_allowed_env_vars ini-directives. Viz také dokumentaci putenv() |
| move_uploaded_file() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. |
| chdir() | Kontroluje, zda adresář, ve kterém pracujete, má stejné UID jako spuštěný skript. |
| dl() | Tyto funkce jsou v bezpečném režimu (safe-mode) deaktivovány. |
| backtick operátor | Tyto funkce jsou v bezpečném režimu (safe-mode) deaktivovány. |
| shell_exec() (funkční ekvivalent backticks) | Tyto funkce jsou v bezpečném režimu (safe-mode) deaktivovány. |
| exec() | Můžete spouštět programy pouze uvnitř adresáře safe_mode_exec_dir. Z praktických důvodů není momentálně možné mít v cestě k souboru s programem komponenty ... |
| system() | Můžete spouštět programy pouze uvnitř adresáře safe_mode_exec_dir. Z praktických důvodů není momentálně možné mít v cestě k souboru s programem komponenty ... |
| passthru() | Můžete spouštět programy pouze uvnitř adresáře safe_mode_exec_dir. Z praktických důvodů není momentálně možné mít v cestě k souboru s programem komponenty ... |
| popen() | Můžete spouštět programy pouze uvnitř adresáře safe_mode_exec_dir. Z praktických důvodů není momentálně možné mít v cestě k souboru s programem komponenty ... |
| mkdir() | Kontroluje, zda adresář, ve kterém pracujete, má stejné UID jako spuštěný skript. |
| rmdir() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. |
| rename() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. Kontroluje, zda adresář, ve kterém pracujete, má stejné UID jako spuštěný skript. |
| unlink() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. Kontroluje, zda adresář, ve kterém pracujete, má stejné UID jako spuštěný skript. |
| copy() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. Kontroluje, zda adresář, ve kterém pracujete, má stejné UID jako spuštěný skript. (pro source a target) |
| chgrp() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. |
| chown() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. |
| chmod() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. Navíc nemůžete nastavovat SUID, SGID a sticky bit |
| touch() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. Kontroluje, zda adresář, ve kterém pracujete, má stejné UID jako spuštěný skript. |
| symlink() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. Kontroluje, zda adresář, ve kterém pracujete, má stejné UID jako spuštěný skript. (pozn.: testován je pouze cíl) |
| link() | Kontroluje, zda soubory/adresáře, se kterými pracujete, mají stejné UID jako spuštěný skript. Kontroluje, zda adresář, ve kterém pracujete, má stejné UID jako spuštěný skript. (pozn.: testován je pouze cíl) |
| getallheaders() | V bezpečném režimu nebudou hlavičky začínající 'authorization' (bez ohledu na velikost písmen) vraceny. Varování: toto nefunguje s aol-server implementací getallheaders()! |
| Jakékoli funkce které používají php4/main/fopen_wrappers.c | ?? |
| Předcházející | Domů | Další |
| Persistentní databázová spojení | Nahoru | Použití PHP z příkazové řádky |