Luki bezpieczeństwa wp-config.php: wzmocnienie zabezpieczeń WordPressa

Gdy wp-config.php był otwarty w vi, kopia wymiany (.swp) utworzona w tym samym folderze dawała się otworzyć wprost pod adresem w sieci. Stwierdzono to 2026-09-13 na moim serwerze, a kopia zawierała hasło do bazy danych i wszystkie klucze bezpieczeństwa.
Bezpieczeństwo wp-config.php sprawdzasz, przechodząc po kolei od góry przez sześć punktów poniżej.
1️⃣ Co się dzieje, gdy wp-config.php wycieknie
wp-config.php zawiera nazwę, użytkownika i hasło bazy danych oraz 8 kluczy bezpieczeństwa, które szyfrują ciasteczka logowania.

Gdy ten plik wycieknie, atakujący może połączyć się bezpośrednio z bazą danych albo podrobić sesje logowania kluczami bezpieczeństwa i przejąć uprawnienia administratora.
2️⃣ Ograniczenie uprawnień pliku do 600
WordPress zwykle ustawia foldery na 755, a pliki na 644, ale wp-config.php ograniczasz do 600, by tylko właściciel mógł go czytać i zapisywać. Oto polecenie uruchomione na witrynie testowej testpilotweb.com.
chmod 600 /home/testpilotweb/www/wp-config.php
stat -c '%a %U' /home/testpilotweb/www/wp-config.php
600 testpilotwebNa serwerach, gdzie PHP działa na innym koncie niż właściciel pliku, przy 600 WordPress nie odczyta pliku i witryna się nie otworzy. Na testpilotweb.com PHP-FPM działa na tym samym koncie co właściciel, więc po zmianie witryna otworzyła się normalnie.
Na hostingu współdzielonym bez SSH ustaw tę samą wartość w menu uprawnień programu FTP lub Menedżera plików cPanel.
3️⃣ Blokada dostępu na serwerze WWW
Jeśli nie możesz zmienić uprawnień albo chcesz dodatkowej warstwy ochrony, każ serwerowi WWW odrzucać same żądania do wp-config.php.
🔲 Apache (.htaccess)
<Files wp-config.php>
Require all denied
</Files>Wiersze [order allow,deny] i [deny from all], częste w starszych artykułach, to składnia Apache 2.2. W Apache 2.4 działają tylko przy włączonym module zgodności (mod_access_compat).
🔲 nginx
nginx nie czyta .htaccess, więc regułę [location] dodajesz w pliku konfiguracyjnym serwera; mój serwer też zwraca w ten sposób 403.
location ~* /wp-config(-sample)?\.php$ {
deny all;
}Kropkę w wyrażeniu regularnym poprzedź ukośnikiem: [\.]. Jeśli zostawisz samą kropkę, zablokowane zostaną też adresy wpisów takie jak [/wp-config-php-ustawienia-podstawowe/]; z powodu tego samego błędu jeden z wpisów u mnie zwrócił kiedyś 403.
4️⃣ Blokada plików tymczasowych edytora i kopii zapasowych
Kopia [.swp] tworzona, gdy plik jest otwarty w vi, i kopia [.bak] zostawiona przed edycją nie są wykonywane jako PHP — serwer wysyła je jako zwykły tekst.
W nginx odcinasz oba rodzaje naraz; [444] to kod tylko nginx, który zamyka połączenie bez odpowiedzi.
location ~ \.sw[opx]$ { return 444; }
location ~* (\.(bak|orig|old|save)|_ori|\.bak\.[0-9]+)$ { return 444; }5️⃣ Przeniesienie poziom wyżej nad katalog główny WWW
WordPress szuka wp-config.php najpierw w folderze instalacji, a gdy go tam nie ma, wczytuje go z folderu bezpośrednio wyżej. Gdy przeniesiesz plik o poziom wyżej, poza [public_html], nie da się do niego dotrzeć żadnym adresem w sieci.
Jeśli jednak w folderze wyżej jest [wp-settings.php] innej instalacji WordPressa, WordPress nie odczyta tamtejszego wp-config.php. Po przeniesieniu od razu sprawdź, czy otwierają się witryna i panel administracyjny.
6️⃣ Wyłączenie edycji plików
Wyłącza to menu „Edytor plików motywu” i „Edytor plików wtyczek” w kokpicie WordPressa. Nawet jeśli atakujący przejmie uprawnienia administratora, to jedna z najmocniejszych obron przed wstrzyknięciem złośliwego kodu przez przeglądarkę.
define('DISALLOW_FILE_EDIT', true); 7️⃣ Usunięcie wp-config-sample.php
wp-config-sample.php to plik przykładowy używany przy instalacji, więc po jej zakończeniu możesz go usunąć. Nie zawiera wrażliwych danych, ale atakujący szukają go pod domyślną ścieżką, więc nie ma powodu go zostawiać.
Prawdziwe wiersze pliku przykładowego i znaczenie każdego elementu opisano w artykule Podstawowe ustawienia wp-config.php poświęconym temu zagadnieniu. Jeśli nie usuniesz pliku, część [(-sample)?] powyższej reguły nginx zablokuje także ten plik.
ℹ️ Informacja o linkach partnerskich
Treści tej witryny zawierają linki partnerskie. Jeśli odwiedzający kupi produkt lub usługę przez taki link, witryna otrzymuje od sprzedawcy prowizję. Kwota płacona przy tym przez kupującego (podczas promocji spada↓) nie wzrasta. Podane ceny, rabaty i dostępność odnoszą się do chwili pisania i mogą różnić się od stanu faktycznego, dlatego przed zakupem sprawdź je u sprzedawcy. Produkty wybieramy i oceniamy według własnych kryteriów, a prowizja nie wpływa ani na kolejność prezentacji, ani na treść ocen.