|
|
 |
Kapitola 22. Bezpečný režim
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 |
Spuštění skriptu script.php
<?php
readfile('/etc/passwd');
?> |
bude mít v bezpečném režimu za výsledek tuto chybu:
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> |
Když spustíte tentýž soubor script.php s timto nastavením
open_basedir, dostanete tento
výsledek:
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 |
získáme takovýto výstup:
Warning: readfile() has been disabled for security reasons in
/docroot/script.php on line 2 |
Funkce omezené/deaktivované v bezpečném režimu
Toto je pravděpodobně neúplný a možná nesprávný přehled funkcí
omezených v
bezpečném režimu.
Tabulka 22-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
| ?? |
User Contributed Notes Bezpečný režim |
 |
| There are no user contributed notes for this page. |
| |