Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Kamil Smitkiewicz. register_globals=Off a) php.ini (globalnie dla wszystkich plików) register _ globals = Off b) httpd.conf (dla danej domeny) php _ admin.

Podobne prezentacje


Prezentacja na temat: "Kamil Smitkiewicz. register_globals=Off a) php.ini (globalnie dla wszystkich plików) register _ globals = Off b) httpd.conf (dla danej domeny) php _ admin."— Zapis prezentacji:

1 Kamil Smitkiewicz

2 register_globals=Off a) php.ini (globalnie dla wszystkich plików) register _ globals = Off b) httpd.conf (dla danej domeny) php _ admin _ value register _ globals 0 c).htacces (dla poszczególnych katalogów/podkatalogów) php _ flag register _ globals 0 2

3 Wyłączenie register_globals eliminuje wiele popularnych ataków na aplikacje napisane w PHP. Przykład wykorzystania słabości register_globals=On: Wystarczy teraz wywołać skrypt z parametrem $auth=1, żeby otrzymać kod, np: 3

4 Jeśli nie możemy ustawić opcji register_globals=Off, to powinniśmy zawsze definiować wartości dla zmiennych nie przekazywanych przez użytkownika, np: 4

5 Korzystanie z safe_mode jest zalecane zawsze, jeśli jest to możliwe. Najważniejszą cechą tego trybu jest to że nie pozwala on na dostęp do plików, których właścicielem jest inny użytkownik, niż właściciel tego skryptu. Zabezpiecza to nas przed odczytem pliku /.../password z poziomu WWW naszego użytkownika. 5

6 Poza tym safe_mode posiada wiele mechanizmów zwiększających bezpieczeństwo naszych skryptów, np.: ograniczenie dostępu do zmiennych środowiskowych, ograniczenie uruchomiania programów systemowych z poziomu aplikacji PHP itp. 6

7 Przykładowe opcje trybu safe_mode: safe_mode = open_basedir = safe_mode_exec_dir = safe_mode_allowed_env_vars = safe_mode_protected_env_vars = disable_functions = 7

8 Opcji safe_mode nie można ustawić na poziomie katalogów w pliku.htacces, można je ustawić w pliku php.ini, lub jeśli chcemy ograniczyć działanie do poszczególnych domen i katalogów, w httpd.conf. 8

9 Oprócz opcji safe_mode bardzo przydatna jest opcja open_basedir. Pozwala ona na ograniczenie dostępu do plików do określonego katalogu, np. jeśli wstawimy: open_basedir=/home/strona.com to nie będziemy mogli odczytać plików leżących powyżej tego katalogu np.: open_basedir=/home/etc/password 9

10 Jeśli w systemie mamy włączoną opcję open_basedir i safe_mode, to w pierwszej kolejności sprawdzane są zabezpieczenia open_basedir, a następnie safe_mode. Jeśli natomiast nie możemy stosować safe_mode i open_basedir razem, to w pierwszej kolejności powinniśmy ustawić safe_mode, w ostateczności używamy samego open_basedir. 10

11 Przy pisaniu i testowaniu skryptów powinniśmy ustawić odpowiedni poziom raportowania błędów: Otrzymamy wiele przydatnych informacji o prawdopodobnych błędach w naszym skrypcie m.in: o niezdefiniowanych zmiennych itp. Zalecane jest wyłączenie tej opcji w wersjach stablinych skryptów, np. poprzez: error_reporting(1) 11

12 Należy pamiętać aby sprawdzać poprawność wszystkich danych przekazywanych przez użytkownika. W szczególności wartości zmiennych określających nazwy plików wykorzystywanych w poleceniach typu include, require, fopen. Zagadnienie to ilustruje przykładowy skrypt.php: 12

13 Wykonanie powyższego skryptu spowoduje dołączenie i wykonanie innego skryptu. Jeżeli użytkownik wywoła skrypt z następującą wartością parametru nazwa_skryptu: nie.com/wlamanie.php w rezultacie wykonany zostanie skrypt znajdujący się na obcym serwerze. 13

14 Ważne pliki konfiguracyjne, biblioteki itp. należy umieszczać poza głównym katalogiem strony. Przykładowo: dla domeny mamy /home/strona.com/public_html to nasze bibliteki i pliki konfiguracyjne powinniśmy umieścić poza tym katalogiem np. w: /home/strona.com/lib /home/strona.com/config a nie w: /home/strona.com/public_html/lib /home/strona.com/public_html/config 14

15 Bardzo często pliki konfiguracyjne mają rozszerzenie.inc. Wtedy jeśli nasz plik z konfiguracją znajduje się w podkatalogu to wystarczy wywołać adres: aby otrzymać na stronie www pełne dane konfiguracyjne np. dane dostępu do danych: 15

16 Należy przejrzyście budować aplikację, poprawnie formatować kod, dzielić projekt na małe moduły. Przy projektowaniu aplikacji powinniśmy przewidywać najgorsze sytuacje, np. nasza aplikacja powinna sobie radzić z niestandardowymi danymi; ze zmodyfikowaniem wywołania strony, w warunkach, kiedy jest wyłączona baza danych itp. 16

17 Jeśli korzystamy z bazy danych, to nasza aplikacja musi mieć dostęp do danych dostępu do bazy. Przykładowe metody przekazania danych dostępu: 1. w pliku konfiguracyjnym 2. dane wprowadzane z formularza 3. dane szyfrowane 4. klucz zapisany w pliku konfiguracyjmym 5. klucz zapisany w httpd.conf, powiązanie wartości klucza z lokalizacją skkryptu. 17

18 Ważne !! Należy pamiętać, aby plik konfiguracyjny nie miał praw czytania dla innych osób niż administrator. 18

19 Do przekazania klucza wykorzystaliśmy opcję disable_functions. W aplikacji odczytujemy klucz poprzez wywołanie: Otrzymany klucz ma taką własność, że jest dostępny tylko w danej lokalizacji na dysku. Jeśli plik przeniesiemy do innego miejsca, to klucz nie będzie dostępny. 19

20 Można też użyć uproszczonej wersji przekazania danych dostępu, wykorzystując dodatkowo opcję disable_class: Konfiguracja httpd.conf: php_admin_value disable_functions admin php_admin_value disable_class admin _________________________________________________ 20

21 W pliku php.ini istnieje dyrektywa pozwalająca na zablokowanie niektórych funkcji jak np. phpinfo(), system() czy fopen(). Funkcje, które chcemy zablokować należy oddzielić przecinkami po dyrektywie disable_functions np. disable_functions = phpinfo, system, fopen, fsockopen 21

22


Pobierz ppt "Kamil Smitkiewicz. register_globals=Off a) php.ini (globalnie dla wszystkich plików) register _ globals = Off b) httpd.conf (dla danej domeny) php _ admin."

Podobne prezentacje


Reklamy Google