pozycjonowanie Dodawarka do katalogów katalogowanie
W połowie roku 1999 ukazał się oficjalnie Zend Engine, nowy silnik języka skryptowego, wokół którego niedługo później zaczęto budować PHP 4. Jego nazwa to kompromisowe połączenie imion twórców projektu. Nowa, oparta o niego wersja PHP ukazała się w maju 2000 roku. Tak jak poprzednio, był to potężny krok naprzód. Programiści mieli do dyspozycji teraz wiele nowych narzędzi, konstrukcji językowych oraz bezpieczniejszy system wejścia/wyjścia. Od strony administracyjnej pojawiło się oficjalne wsparcie dla wielu nowych serwerów.


Wykończenia wnętrz Warszawa
Szybkie, tanie remonty lokali użytkowych
Komleksowe wykończenia pomieszczeń
www.dobrewnetrze.waw.pl
modelling agency UK
from how to have the perfect Polaroid
you are a female or male model
www.modelsconnect.net
pranie tapicerek
Skuteczne usuwanie plam i zabrudzeń
Tanie czyszczenie mebli tapicerowanych
www.czystatapicerka.pl
diamenty
Skup brylantów i kamieni kolorowych
Tanie wyroby z kamieni szlachetnych
www.gemur.pl


Fryzjer Kraków
Najlepszy salon fryzjerski w Krakowie
Modelowanie i koloryzacja włosów
fryzjer-krakow.com
Opiekunka
Opiekunki dla osób starszych
Niania
www.nianka.info


Pojawił się całkowicie nowy model programowania obiektowego co spowodowało utratę pełnej kompatybilności z poprzednimi wersjami PHP. W ramach tego modelu, zmieniony został sposób reprezentacji obiektów. W wersjach wcześniejszych obiekt był jednocześnie zmienną, co sprawiało duże trudności, dlatego też w wersji 5 na wzór Javy zmienna obiektowa stała się jedynie referencją do właściwego obiektu. Operacja przypisania = powoduje jedynie powstanie drugiej referencji wskazującej na ten sam obiekt.

Rozdział 42. Tryb bezpieczny

Spis treści
Funkcje ograniczone/wyłączone w trybie bezpiecznym

Tryb bezpieczny (safe mode) jest próbą rozwiązania problemów bezpieczeństwa na współdzielnym serwerze. Co prawda rozwiązywanie ich na poziomie PHP nie jest najlepszym rozwiązaniem, ale jeśli nie ma możliwości zrobienia tego na poziomie serwera www lub systemu operacyjnego, na wielu serwerach, zwłaszcza u usługodawców internetowych, używa się trybu bezpiecznego.

Dyrektywy konfiguracyjne odpowiadające za tryb bezpieczny:
safe_mode = Off
safe_mode_gid = 0
safe_mode_include_dir =
safe_mode_exec_dir =
open_basedir =
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
disable_functions =

Gdy opcja safe_mode jest włączona, PHP sprawdza czy właścicielem pliku na którym na którym funkcja chce operować i właścicielem uruchamianego skryptu jest ten sam użytkownik. Na przykład:
-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
Uruchomienie script.php
<?php
readfile
('/etc/passwd');
?>
z uruchomionym trybem bezpiecznym spowoduje wyświetlenie błędu:
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

Jeśli zamiast włączać opcję safe_mode ustawisz katalog open_basedir, wtedy wszystkie operacje plikowe bedą ograniczone do tego katalogu. Na przykład (dla httpd.conf Apache'a):
<Directory /docroot>
php_admin_value open_basedir /docroot
</Directory>
Uruchomienie tego samego skryptu script.php z ustawionym katalogiem open_basedir spowoduje wyświetlenie:
Warning: open_basedir restriction in effect. File is in wrong directory in
/docroot/script.php on line 2

Możesz także wyłączyć pojedyncze funkcje. Pamiętaj jednak, że dyrektywa disable_functions może być użyta tylko w pliku php.ini, co oznacza, że nie da się wyłączać funkcji w sekcjach VirtualHost i Directory w pliku httpd.conf. Jeśli do pliku php.ini dodasz:
disable_functions readfile,system
po uruchomieniu skryptu otrzymasz:
Warning: readfile() has been disabled for security reasons in
/docroot/script.php on line 2

Funkcje ograniczone/wyłączone w trybie bezpiecznym

Jest to najprawdopodobniej wciąż niekompletna lista funkcji ograniczonych przez tryb bezpieczny.

Tabela 42-1. Funkcje ograniczone w trybie bezpiecznym

FunkcjaOgraniczenia
dbmopen()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.
dbase_open()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.
filepro()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.
filepro_rowcount()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.
filepro_retrieve()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.
ifx_*()Podlega ograniczeniom narzuconym przez sql_safe_mode, (!= tryb bezpieczny)
ingres_*()Podlega ograniczeniom narzuconym przez sql_safe_mode, (!= tryb bezpieczny)
mysql_*()Podlega ograniczeniom narzuconym przez sql_safe_mode, (!= tryb bezpieczny)
pg_loimport()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.
posix_mkfifo()Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.
putenv()Podlega dyrektywom safe_mode_protected_env_vars i safe_mode_allowed_env_vars w php.ini. Zobacz również dokumantację do putenv()
move_uploaded_file()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.
chdir()Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.
dl()Ta funkcja jest niedostępna w trybie bezpiecznym
lewy apostrofTa funkcja jest niedostępna w trybie bezpiecznym
shell_exec() (funkcja równoważna z lewym apostrofem)Ta funkcja jest niedostępna w trybie bezpiecznym
exec()Możesz uruchamiać programy jedynie z katalogu zdefiniowanego dyrektywą safe_mode_exec_dir. Ze względów praktycznych obecnie nie ma możliwości stosowania .. w ścieżce do programu.
system()Można uruchamiać programy jedynie z katalogu zdefiniowanego dyrektywą safe_mode_exec_dir. Ze względów praktycznych obecnie nie ma możliwości stosowania .. w ścieżce do programu.
passthru()Można uruchamiać programy jedynie z katalogu zdefiniowanego dyrektywą safe_mode_exec_dir. Ze względów praktycznych obecnie nie ma możliwości stosowania .. w ścieżce do programu.
popen()Można uruchamiać programy jedynie z katalogu zdefiniowanego dyrektywą safe_mode_exec_dir. Ze względów praktycznych obecnie nie ma możliwości stosowania .. w ścieżce do programu.
mkdir()Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.
rmdir()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.
rename()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.
unlink()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.
copy()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. (dla Ĺşródła i przeznaczenia)
chgrp()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.
chown()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.
chmod()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. Dodatkowo, nie można ustawić bitów SUID, SGID i sticky bit.
touch()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany.
symlink()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. (sprawdzany jest jedynie element do którego tworzony jest link)
link()Sprawdza czy pliki lub katalogi, na których będą przeprowadzane operacje, mają takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. Sprawdza, czy katalog, na którym ma być wykonywana operacja, ma takie same UID (owner) jak skrypt, który jest aktualnie wykonywany. (sprawdzany jest jedynie element do którego tworzony jest link)
getallheaders() W tybie bezpiecznym, nagłowki zaczynające się od 'authorization' (wielkość liter bez znaczenia) nie będą zwracane. Uwaga: w implementacji dla serwera AOL ta funkcjonalność jest uszkodzona
Każda funkcja korzystająca z php4/main/fopen_wrappers.c ??