Blog 24/7

utwardzanie pliku wp-config.php

TAB. 1Hasłoobie formy
Po angielskuwp-config hardening
Którą formą pisaćobie formy Obie formy są w obiegu. Przy pierwszym wystąpieniu pisz „polski termin (english term)”, dalej sam polski.
Inne formyhardening wp-config.php · zabezpieczenie pliku konfiguracyjnego WordPressa · utwardzenie konfiguracji
KategoriaStrony WWW, WordPress i hosting

Utwardzanie pliku wp-config.php (wp-config hardening) to zestaw ustawień i ograniczeń, które chronią główny plik konfiguracyjny WordPressa i przy okazji zawężają to, co może zrobić intruz po wejściu do panelu. Plik leży w katalogu głównym instalacji i przechowuje dane połączenia z bazą, klucze uwierzytelniania i ich sole oraz prefiks tabel [3]. Utwardzanie obejmuje trzy obszary: kto może plik odczytać, jakie sekrety w nim są i jakie funkcje panelu plik wyłącza. Jest szczególnym przypadkiem ogólnej praktyki, którą CERT Polska opisuje jako utwardzenie konfiguracji przez wyłączenie niewykorzystywanych funkcji [6]; zob. utwardzanie.

Co zawiera plik i dlaczego jest cenny

W wp-config.php zapisane są nazwa bazy, użytkownik, hasło i host bazy danych, a także stałe AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY i odpowiadające im sole [3]. Zmienna $table_prefix określa prefiks tabel, domyślnie wp_ [3]. Kto przeczyta plik, zna więc dane uwierzytelniające do bazy i sekrety, którymi WordPress podpisuje ciasteczka logowania.

Skalę problemu pokazał wpis Niebezpiecznika z 18 sierpnia 2015 roku. Wyszukiwanie w serwisie GitHub plików o nazwie wp-config.php zawierających DB_PASSWORD zwróciło 71 227 wyników [4]. Część z nich mogła być przykładowymi plikami, ale autorzy radzili blokować dostęp do serwerów baz danych z interfejsów publicznych i używać unikalnych haseł [4]. To przykład hasła zaszytego w kodzie, które wyciekło razem z repozytorium.

Składniki utwardzania

Poszczególne kroki i ich źródła zestawia tabela poniżej.

KrokCo robiŹródło
uprawnienia 400 lub 440tylko właściciel i serwer WWW czytają plik [1]podręcznik WordPressa
blokada w .htaccessserwer odmawia wydania pliku przez HTTP [1]podręcznik WordPressa
przeniesienie poziom wyżejplik poza katalogiem instalacji [1]podręcznik WordPressa
losowe klucze i soletrudniejszy atak na ciasteczka [2]API wp-config.php
DISALLOW_FILE_EDITwyłącza edytor plików w panelu [1]podręcznik WordPressa
DISALLOW_FILE_MODSblokuje instalację i aktualizację z panelu [3]podręcznik WordPressa

Uprawnienia. Dokumentacja zaleca, aby plik mógł czytać tylko właściciel konta i serwer WWW, co zwykle oznacza uprawnienia 400 albo 440 [1].

Blokada dostępu z sieci. Na serwerze Apache wystarczy reguła w pliku .htaccess [1]; zob. zabezpieczenia w .htaccess.

<Files "wp-config.php">
Require all denied
</Files>

Przeniesienie pliku. WordPress odczyta wp-config.php także z katalogu o jeden poziom wyżej niż instalacja [1]. Podręcznik zastrzega jednak, że korzyść jest według części osób niewielka, a nieostrożne przeniesienie może wprowadzić poważne podatności [1].

Klucze i sole. Według dokumentacji tajny klucz utrudnia udany atak, dodając do hasła losowe elementy; wartości mają być długie i losowe, najlepiej z generatora api.wordpress.org/secret-key/1.1/salt/ [2]. Zmiana kluczy unieważnia wszystkie istniejące ciasteczka, więc każdy użytkownik musi zalogować się ponownie [2]. Szczegóły opisuje hasło klucze bezpieczeństwa i sole.

Wyłączenie edytora. Stała DISALLOW_FILE_EDIT odpowiada odebraniu wszystkim użytkownikom uprawnień edit_themes, edit_plugins i edit_files [1]. Sekurak podaje ją jako jeden z kroków zabezpieczenia WordPressa [5]. Mocniejsza DISALLOW_FILE_MODS blokuje też instalowanie i aktualizowanie wtyczek i motywów z panelu i sama wyłącza edytor [2] [3].

W WordPressie

Typowy przebieg utwardzania na świeżej instalacji pokazuje schemat poniżej.

RYS. 1Utwardzanie wp-config.php krok po kroku

Minimalny fragment pliku po utwardzeniu wygląda tak. Wartości kluczy są tu skrócone.

define( 'AUTH_KEY',           'długi-losowy-ciąg-z-generatora' );
define( 'DISALLOW_FILE_EDIT', true );
define( 'WP_DEBUG',           false );
define( 'FORCE_SSL_ADMIN',    true );

Stała FORCE_SSL_ADMIN wymusza bezpieczne połączenie przy logowaniu i w panelu [3]. WP_DEBUG steruje raportowaniem błędów, a WP_DEBUG_DISPLAY decyduje, czy błędy trafiają na ekran, czy do logu [3]; błędy wypisywane na ekran to tryb debugowania na produkcji, osobne hasło słownika. Edytor plików motywów i wtyczek jest osobnym hasłem, bo to on zmienia przejęte konto administratora w zdalne wykonanie kodu (RCE).

Dokumentacja dodaje uwagę o bazie: do codziennej pracy WordPress potrzebuje uprawnień SELECT, INSERT, UPDATE i DELETE, ale odbieranie pozostałych nie jest zalecane, bo aktualizacje zmieniają schemat bazy [1]. Zmianę domyślnego prefiksu wp_ podręcznik opisuje jako sposób na zablokowanie przynajmniej części ataków SQL injection [1]; w nazwie prefiksu dozwolone są tylko cyfry, litery i podkreślenia [2].

Zagrożenia i skutki

Odczytany wp-config.php daje atakującemu hasło do bazy. Jeśli baza przyjmuje połączenia z zewnątrz, może on zmienić hasła użytkowników albo dopisać nieautoryzowane konto administratora. Klucze i sole pozwalają z kolei podrabiać ciasteczka logowania, co prowadzi do przejęcia sesji bez znajomości hasła.

Plik najczęściej wycieka nie przez sam serwer, lecz przez kopie: repozytorium kodu, jak w opisanym przypadku z GitHuba [4], archiwa i pliki zapasowe w katalogu WWW. Takie publicznie dostępne pliki wrażliwe są pobierane przez automaty. Drugą drogą jest path traversal albo LFI (Local File Inclusion) we wtyczce, które pozwalają odczytać dowolny plik serwera, w tym konfigurację.

Wyłączenie edytora nie zatrzyma kogoś, kto ma już konto administratora, ale odbiera mu najprostszą drogę do wgrania kodu PHP. Dokumentacja opisuje to jako dodatkową warstwę na wypadek przejęcia konta z wysokimi uprawnieniami [2].

Dobre praktyki

  • Hasło do bazy traktować jak każdy sekret: unikalne, długie, zmieniane po incydencie; zob. zarządzanie sekretami.
  • Po każdym włamaniu wygenerować nowe klucze i sole, co wyloguje wszystkie sesje [2].
  • Nie trzymać wp-config.php w repozytorium kodu ani w publicznym archiwum [4].
  • Łączyć utwardzanie pliku z zasadą najmniejszych uprawnień dla kont w panelu i na serwerze.
  • Pliki na serwer przesyłać przez SFTP, co podręcznik WordPressa zaleca, jeśli hosting na to pozwala [1].
TAB. 2

Przypisy

6
  1. [1] Hardening WordPress — Advanced Administration Handbook · WordPress.org
  2. [2] wp-config.php — Common APIs Handbook · WordPress.org
  3. [3] Editing wp-config.php — Advanced Administration Handbook · WordPress.org
  4. [4] GitHub i hasła do WordPressów · Niebezpiecznik
  5. [5] Jak zabezpieczyć WordPress? Poradnik krok po kroku · Sekurak
  6. [6] Rekomendacje dla wzmocnienia ochrony systemów OT · CERT Polska
TAB. 3

Hasła w tym artykule

19
TAB. 4

Linkują tutaj

26

Wszystkie kategorie → · Hasło w słowniku →

Blog 24/7
05.11CISA i FBI wzywają do zabezpieczenia sterowników chłodzenia po atakach w Europietherecord.media05.11Midnight Blizzard atakowała iPhone'y i Androidy przez zainfekowane strony w Europie i USAsecurityweek.com05.11APT29 kradła dane z iPhone'ów i Androidów przez przejęte i podrobione stronytherecord.media05.11Grupa APT29 przejęła skrypt Plerdy i atakowała niezałatane iPhone'y i Androidythehackernews.com05.11Microsoft wykrył 7,3 mld wiadomości phishingowych w III kwartale 2026microsoft.com05.11DigiCert ujawnia wyciek danych klientów i skanów dokumentów tożsamościbleepingcomputer.com05.11CWPdoor podmienia serwer cwpsrv w Control Web Panel i otwiera tylne wejście do Linuksableepingcomputer.com05.11Brytyjskie NCSC ostrzega, że narzędzia AI zwiększyły liczbę wykrywanych luk zero-daythehackernews.com05.11Skaner RootEvidence sprawdza starą lukę w Cisco IOS i dodaje nagłówki Opt-Outisc.sans.edu05.11Włamanie do portalu grantowego Norad, zagrożone dane 20 614 użytkownikówhelpnetsecurity.com