Aplikacje internetowe

Bełdziowe spojrzenie na aplikacje internetowe

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: ,
Kategoria: Bezpieczeństwo, PHP


2 komentarze

  1. j.f.d.j. napisał(a):

    właśnie czegoś w tym stylu szukałem
    Pozdro :)

  2. 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.

Dodaj komentarz