← Wszystkie porady

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 zablokowaneexec(), 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 = On pozwala 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 informacjidisplay_errors i expose_php ujawniają ścieżki plików, wersje oprogramowania i konfigurację serwera.
  • Wykonywanie poleceń systemowych — dostępne funkcje jak exec() czy shell_exec() umożliwiają uruchomienie dowolnych poleceń na serwerze, jeśli atakujący uzyska możliwość wykonania kodu PHP.
  • Przechwycenie sesji — ciasteczka bez flagi Secure mogą być przesłane nieszyfrowanym połączeniem. Bez HttpOnly są dostępne z poziomu JavaScript (podatność XSS → kradzież sesji).
  • Przechodzenie po systemie plików — bez open_basedir skompromitowana 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.