Bezpieczna konfiguracja PHP
Chcąc zapewnić pełne bezpieczeństwo tworzonej aplikacji nie wystarczy zadbać tylko o nią. Nawet najlepiej napisana aplikacja może zostać skompromitowana w chwili, gdy środowisko, w którym pracuje nie zostało odpowiednio przygotowane (nieaktualne wersje oprogramowania, zła konfiguracja etc). Poniżej znajduje się opis dyrektyw konfiguracyjnych PHP, które mają wpływ na bezpieczeństwo uruchamianych skryptów.
allow_url_fopen
Zadanie: Umożliwienie czytania zdalnych plików.
Opis: Powyższa dyrektywa określa czy korzystając z funkcji czytania plików (file_get_contents / fopen) możliwe jest odwoływanie się do plików znajdujących się na innym serwerze niż lokalny.
Niebezpieczeństwo: W przypadku czytania plików, których adres bazuje na danych przesłanych od użytkownika (adres URL / ciastko) może wystąpić podatność na atak zdalnego dołączenia plików (RFI).
Dodatkowe materiały:
Kompatybilność: dyrektywa dostępna od wersji 4.0.3
allow_url_include
Zadanie: Umożliwienie dołączanie zdalnych plików.
Opis: Powyższa dyrektywa określa czy możliwe jest dołączanie zdalnych plików korzystając z instrukcji include / required.
Niebezpieczeństwo: W przypadku dołączania plików, których adres bazuje na danych przesłanych od użytkownika (adres URL / ciastko) może wystąpić podatność na atak zdalnego dołączenia plików (RFI). Dodatkowo dołączane pliki mogą zawierać kod PHP, który zostanie wykonany
Dodatkowe materiały: Bezpieczeństwo dostępu do plików
register_globals
Zadanie: Przepisywanie zmiennych superglobalnych do zmiennych lokalnych.
Przykład: Włączenie powyższej dyrektywy skutkuje jednakowym traktowaniem poniższych zmiennych:
$foo === $_GET[ 'foo' ]
tak więc w przypadku poniższego kodu:
if ( $poziom == 'admin' ) echo 'Jesteś adminem';
dodanie do adresu url ?poziom=admin będzie skutkowało wykonaniem powyższego warunku.
Niebezpieczeństwo: Konieczne staje się inicjowanie każdej zmiennej lokalnej. Zmienna, która nie zostanie zainicjowana przez programistę może być dowolnie modyfikowana poprzez np. adres URL.
Kompatybilność: od wersji 5.3 oznaczona jako przestarzała, w wersji 6.0 usunięta
open_basedir
Zadanie: Określenie katalogu bazowego.
Opis: Określenie katalogu bazowego gwarantuje nam brak możliwości czytania plików znajdujących się ponad wybranym katalogiem.
Niebezpieczeństwo: Brak określenia katalogu bazowego może skutkować wyświetlaniem dowolnych plików znajdujących się w systemie (RFI).
Dodatkowe materiały: Bezpieczeństwo dostępu do plików
safe_mode
Zadanie: Uruchomienie interpretera PHP w trybie bezpiecznym.
Opis: Zwiększenie bezpieczeństwa podczas korzystania z interpretera przez wielu użytkowników (hostingi współdzielone) – głównie poprzez sprawdzanie właściciela plików / katalogów.
Niebezpieczeństwo: Wyłączenie trybu safe mode na hostingu współdzielonym może doprowadzić do wglądu w pliki dowolnego użytkownika.
Kompatybilność: usunięta w wersji 6.0
display_errors
Zadanie: Wyświetlanie błędów.
Opis: Powyższa dyrektywa informuje parser czy w chwili wystąpienia błędu ma on zostać wyświetlany.
Niebezpieczeństwo: Pokazywanie komunikatów błędów może być pomocne podczas analizowania zabezpieczeń skryptu.
expose_php
Zadanie: Dodaje nagłówek informujący o wersji PHP.
Opis: Włączenie powyższej dyrektywy skutkuje dodaniem następującego nagłówku do zwracanych odpowiedzi:
X-Powered-By: PHP/5.2.8
Niebezpieczeństwo: Ujawnienie wersji używanego interpretera umożliwia łatwe przeszukanie dostępnych zasobów w celu znalezienia występujących w nim błędów.
magic_quotes
Zadanie: Automatyczne dodawanie znaku ucieczki.
Opis: Włączenie dyrektywy powoduje umieszczenie backslasha (\) przed następującymi znakami ”, ‚, \, NULL w danych przesłanych przez użytkownika. Zadaniem dyrektywy miała być pomoc w ochronie przed SQL Injection.
Kompatybilność: od wersji 5.3 oznaczona jako przestarzała, w wersji 6.0 usunięta
disable_functions
Zadanie: Wyłączenie wybranych funkcji.
Opis: Wyłączając potencjalnie niebezpieczne funkcje, z których nie korzystamy ograniczamy możliwości napastnika w chwili skompromitowana zabezpieczeń.
Przykłady potencjalnie niebezpiecznych funkcji: exec, shell_exec, passthru, system, eval, show_source, proc_open, popen, parse_ini_file, dl
enable_dl
Zadanie: Wyłączenie możliwości dynamicznego dołączania bibliotek.
Opis: Wyłącza możliwość korzystania z funkcji dl umożliwiającej dynamiczne dołączanie rozszerzeń PHP.
Kompatybilność: usunięta w wersji 6.0
session.use_trans_sid
Zadanie: Dodanie identyfikatora sesji do adresu URL.
Opis: Włączenie dyrektywy powoduje przekazywania identyfikatora sesji przy pomocy adresu URL zamiast ciastek.
Niebezpieczeństwo: Możliwość podszycia się pod innego użytkownika.
Kompatybilność: dostępna od wersji 4.2
Dodatkowe materiały: Bezpieczeństwo mechanizmu sesji
session.cookie_httponly
Zadanie: Automatyczne dodanie flagi httpOnly do tworzonych ciastek.
Opis: Dodanie flagi httpOnly skutkuje brakiem możliwości odwoływania się do ciasteczek z poziomu JavaScript (pod warunkiem respektowania flagi przez przeglądarkę).
Kompatybilność: dostępna od wersji 5.2
Dodatkowe materiały: Bezpieczeństwo mechanizmu sesji
Tagi: konfiguracja, PHP
Kategoria: Bezpieczeństwo, PHP
właśnie czegoś w tym stylu szukałem
Pozdro :)
Niestety, ale niektóre opcje nie da się ustawić z poziomu .htaccess
Pełna lista na http://www.php.net/manual/pl/ini.list.php
Gdy przy danej opcji jest PHP_INI_ALL oraz w komentarzach że jest obsługiwana od danej wersji to już jakiś sukces.