|
|
PHP (angielski akronim rekurencyjny, którego rozwinięcie to PHP Hypertext Preprocessor), pierwotnie nazwany Personal
Home Page - skryptowy język programowania, służący przede wszystkim do tworzenia dynamicznych stron WWW i wykonywany w
tym przypadku po stronie serwera, z możliwością zagnieżdżania w HTML (bądź XHTML). PHP jest podobny w założeniach do
dużo starszego mechanizmu SSI (Server Side Includes), jednak jest w stosunku do SSI nieporównanie bardziej rozbudowany.
Udostępniany jest na zasadach licencji open-source. Jego składnia bazuje na językach C, Java i Perl.
SQL (ang. Structured Query Language) to strukturalny język zapytań używany do tworzenia, modyfikowania baz danych oraz
do umieszczania i pobierania danych z baz danych.
Język SQL jest językiem deklaratywnym. Decyzję o sposobie przechowywania i pobrania danych pozostawia się systemowi
zarządzania bazą danych DBMS.
Jest to język programowania opracowany w latach siedemdziesiątych w firmie IBM. Stał się on standardem w komunikacji z
serwerami relacyjnych baz danych. Wiele współczesnych systemów relacyjnych baz danych używa do komunikacji z
użytkownikiem SQL, dlatego mówi się, że korzystanie z relacyjnych baz danych, to korzystanie z SQL-a.
Apache jest otwartym serwerem HTTP dostępnym dla wielu systemów operacyjnych (m.in. UNIX, GNU/Linux, BSD,
Microsoft Windows). Po angielsku słowo Apache wymawia się epaczi, co brzmi tak samo jak a patchy (server), co było
określeniem tego serwera we wczesnym stadium jego rozwoju w 1995 roku, kiedy był on głównie zbiorem poprawek (patch)
nałożonych na serwer HTTP o nazwie NCSA.
Apache jest najszerzej stosowanym serwerem HTTP w Internecie. W maju 2003 jego udział wśród serwerów wynosił 62%. W
połączeniu z interpreterem języka skryptowego PHP i bazą danych MySQL, Apache stanowi jedno z najczęściej spotykanych
środowisk w firmach oferujących miejsce na serwerach sieciowych.
|
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
|
Jest to najprawdopodobniej wciąż niekompletna lista
funkcji ograniczonych przez tryb bezpieczny.
Tabela 42-1. Funkcje ograniczone w trybie
bezpiecznym
| Funkcja |
Ograniczenia |
| 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
apostrof |
Ta 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 |
?? |
|