Niebezpieczna konfiguracja PHP
Co to oznacza
Jeśli konfiguracja PHP na Twoim serwerze nie jest odpowiednio zabezpieczona, strona WordPress jest narażona niezależnie od tego, jak dobrze skonfigurowany jest sam WordPress. PHP to silnik, na którym działa cały system, i jego ustawienia mają bezpośredni wpływ na bezpieczeństwo. Kluczowe parametry do sprawdzenia:
- allow_url_include = On (krytyczne) — pozwala na ładowanie zewnętrznych plików PHP przez URL
- display_errors = On — wyświetla błędy PHP odwiedzającym stronę
- expose_php = On — ujawnia wersję PHP w nagłówkach HTTP
- open_basedir nieustawiony — PHP może czytać dowolne pliki na serwerze
- Niebezpieczne funkcje nie zablokowane —
exec(),system(),passthru(),shell_exec()dostępne - Ciasteczka sesji bez flag Secure/HttpOnly — sesje narażone na przechwycenie
Jakie jest ryzyko
- Remote File Inclusion (RFI) —
allow_url_include = Onpozwala atakującemu załadować i wykonać złośliwy kod PHP z zewnętrznego serwera. To bezpośrednia droga do pełnego przejęcia strony. - Wyciek informacji —
display_errorsiexpose_phpujawniają ścieżki plików, wersje oprogramowania i konfigurację serwera. - Wykonywanie poleceń systemowych — dostępne funkcje jak
exec()czyshell_exec()umożliwiają uruchomienie dowolnych poleceń na serwerze, jeśli atakujący uzyska możliwość wykonania kodu PHP. - Przechwycenie sesji — ciasteczka bez flagi
Securemogą być przesłane nieszyfrowanym połączeniem. BezHttpOnlysą dostępne z poziomu JavaScript (podatność XSS → kradzież sesji). - Przechodzenie po systemie plików — bez
open_basedirskompromitowana strona daje dostęp do plików innych stron na serwerze.
Jak to naprawić
Zmiany w konfiguracji PHP wprowadza się w pliku php.ini, .user.ini lub php-fpm.conf (zależnie od serwera):
; Krytyczne
allow_url_include = Off
; Wyświetlanie błędów
display_errors = Off
log_errors = On
error_log = /sciezka/do/php-error.log
; Ukrycie wersji PHP
expose_php = Off
; Ograniczenie dostępu do plików
open_basedir = /sciezka/do/wordpress:/tmp
; Blokada niebezpiecznych funkcji
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec
; Bezpieczne ciasteczka sesji
session.cookie_secure = On
session.cookie_httponly = On
Na hostingu współdzielonym — skontaktuj się z dostawcą lub użyj pliku .user.ini w katalogu WordPress.