Bezpieczeństwo WordPressa to proces regularnej higieny, a nie jednorazowe ustawienie jednej opcji. Najwięcej daje połączenie aktualizacji, silnego uwierzytelniania, HTTPS, ograniczonej liczby dodatków i sprawdzonych kopii zapasowych. WordPress jest częstym celem automatycznych skanerów, ale ataki zwykle nie są wymierzone w konkretną osobę. Boty przeszukują tysiące stron i wykorzystują stare wtyczki, słabe hasła oraz błędy konfiguracji.
Od czego zacząć bezpieczeństwo WordPressa?
Podstawowa ochrona nie wymaga przebudowy całej witryny. Najpierw usuń najczęstsze, łatwe do wykorzystania słabości. Dopiero później zajmij się konfiguracją serwera i bardziej szczegółowym hardeningiem.
Na początek sprawdź następujące elementy:
- Silne hasła – każde konto powinno mieć długie, unikalne hasło, którego nie używasz w innych usługach.
- Oddzielne konta użytkowników – nie udostępniaj jednego loginu kilku osobom i usuwaj konta osób, które nie pracują już przy stronie.
- Brak loginu „admin” – użyj indywidualnej nazwy konta administratora, aby utrudnić ataki typu Brute-Force.
- Uwierzytelnianie dwuskładnikowe – 2FA dodaje drugi etap logowania, więc samo przejęcie hasła nie powinno wystarczyć do wejścia do panelu.
- HTTPS – certyfikat SSL szyfruje dane przesyłane między przeglądarką a serwerem i ogranicza ryzyko ich przechwycenia w tranzycie.
Certyfikat SSL nie zatrzyma spamu w formularzu ani nie naprawi podatnej wtyczki. Chroni jednak połączenie, dlatego logowanie, formularze i panel administracyjny powinny działać przez HTTPS.
Core WordPressa a aktualizacje wtyczek
Aktualizacja WordPress Core zmienia pliki samego systemu. Aktualizacje wtyczek i motywów dotyczą kodu dostarczanego przez ich autorów. To osobne elementy, dlatego aktualny Core nie oznacza jeszcze, że cała instalacja jest aktualna.
Włącz automatyczne aktualizacje bezpieczeństwa, jeśli charakter strony na to pozwala. Przy sklepie, rozbudowanym serwisie lub nietypowych integracjach połącz je z backupem i sprawdzeniem działania strony po zmianach. Automatyzacja skraca czas między publikacją poprawki a jej wdrożeniem, ale nie zastępuje kontroli.
Hardening WordPressa – wp-config.php i .htaccess
Hardening oznacza ograniczanie możliwości, z których strona nie korzysta, oraz blokowanie dostępu do wrażliwych plików. Najczęściej obejmuje plik wp-config.php i konfigurację serwera w .htaccess.
Przed każdą zmianą w tych plikach wykonaj kopię zapasową plików i bazy danych. Błędna składnia albo niepasująca konfiguracja serwera może wywołać błąd 500 lub unieruchomić stronę. Jeśli nie masz dostępu do kopii i sposobu szybkiego wycofania zmian, nie edytuj plików produkcyjnych samodzielnie.
| Działanie | Plik | Poziom trudności | Cel |
|---|---|---|---|
| Wyłączenie edytora plików | wp-config.php |
Podstawowy | Ograniczenie możliwości wstrzyknięcia kodu z panelu administracyjnego |
| Blokada dostępu do konfiguracji | .htaccess |
Średni | Ochrona plików zawierających ustawienia i dane dostępowe |
| Blokada wykonywania PHP w uploadach | wp-content/uploads/.htaccess |
Średni | Uniemożliwienie uruchomienia skryptu przesłanego do biblioteki mediów |
Wyłączenie edycji motywów i wtyczek
Jeśli nie zmieniasz kodu z poziomu panelu WordPressa, wyłącz wbudowany edytor. W pliku wp-config.php, przed linią kończącą edycję konfiguracji, dodaj:
define( 'DISALLOW_FILE_EDIT', true );
Zmniejsza to ryzyko wykorzystania edytora po przejęciu konta administratora. Do zmian używaj kontrolowanego dostępu do serwera, najlepiej SFTP lub FTPS, a nie nieszyfrowanego FTP.
Ochrona plików konfiguracyjnych
Na serwerze Apache możesz ograniczyć bezpośredni dostęp do plików zawierających konfigurację. W głównym .htaccess można zastosować:
<FilesMatch "^(wp-config\.php|\.htaccess)$">
Require all denied
</FilesMatch>
Ta składnia jest przeznaczona dla nowszych wersji Apache. Na starszych konfiguracjach mogą być wymagane dyrektywy oparte na Order i Deny. Nie wklejaj reguły bez sprawdzenia wersji serwera i bez kopii zapasowej. Jeśli hosting korzysta z innego serwera WWW, na przykład Nginx, plik .htaccess nie będzie właściwym miejscem konfiguracji.
Blokada wykonywania PHP w katalogu uploadów
Jeżeli formularz lub inna funkcja strony zapisuje pliki w wp-content/uploads/, można ograniczyć wykonywanie skryptów PHP w tym katalogu. W jego własnym pliku .htaccess stosuje się na Apache między innymi:
<FilesMatch "\.php$">
Require all denied
</FilesMatch>
Reguła nie zastępuje walidacji rozszerzeń, typu MIME, wielkości i zawartości plików przesyłanych przez użytkowników. Chroni przed jednym ze scenariuszy, ale nie rozwiązuje problemu podatnego formularza ani złośliwego kodu uruchomionego poza tym katalogiem.
Jak dobierać wtyczki i motywy?
Każda wtyczka zwiększa liczbę elementów, które trzeba aktualizować i kontrolować. Liczy się nie sama liczba dodatków, lecz ich jakość, źródło, historia aktualizacji i zgodność z używaną wersją WordPressa.
Nie instaluj wtyczki tylko dlatego, że rozwiązuje drobny problem. Usuń wyłączone dodatki i motywy, których nie używasz. Samo wyłączenie nie usuwa ich plików, więc nieaktualny kod nadal może tworzyć powierzchnię ataku.
Wtyczka bezpieczeństwa może pomóc w monitorowaniu plików, ograniczaniu prób logowania czy wykrywaniu podejrzanych zmian. Nie daje jednak gwarancji pełnej ochrony. Nie zastąpi aktualizacji, 2FA, kopii zapasowych ani poprawnej konfiguracji serwera. Korzystaj z dodatków z zaufanych źródeł i sprawdzaj, czy są nadal rozwijane.
Backup WordPressa jako ostatnia linia obrony
Kopia zapasowa przydaje się po włamaniu, błędnej aktualizacji, awarii hostingu i zwykłym błędzie administratora. Powinna obejmować bazę danych oraz pliki. Baza przechowuje między innymi treści, ustawienia, konta i zamówienia, a pliki zawierają motywy, wtyczki, media oraz własne modyfikacje.
Uproszczona zasada 3-2-1 oznacza trzy kopie danych, na co najmniej dwóch różnych nośnikach, z jedną kopią przechowywaną poza serwerem produkcyjnym. Hostingowe snapshoty są przydatne, ale nie powinny być jedynym planem odzyskiwania.
Przy backupie sprawdź te elementy:
- Częstotliwość – dopasuj ją do zmian na stronie. Sklep i portal publikujący codziennie wymagają częstszych kopii niż prosta strona wizytówka.
- Zakres – zapisuj bazę danych, pliki, media i konfigurację potrzebną do odtworzenia witryny.
- Lokalizacja – przechowuj dodatkową kopię poza serwerem produkcyjnym.
- Test przywracania – sprawdź na kopii testowej, czy backup rzeczywiście pozwala uruchomić stronę.
- Kopia przed zmianą – wykonaj ją przed aktualizacją Core, motywu, wtyczek lub większą zmianą konfiguracji.
Co zrobić po włamaniu lub infekcji?
Nie usuwaj przypadkowo pojedynczych plików. Możesz zatrzeć ślady, pominąć ukryty backdoor albo usunąć element potrzebny do analizy. Jeżeli infekcja wpływa na dane użytkowników lub bezpieczeństwo odwiedzających, ogranicz dostęp do strony i skorzystaj z pomocy administratora.
Postępuj w następującej kolejności:
- Odizoluj stronę lub włącz tryb konserwacji, jeśli złośliwa zawartość jest nadal dostępna dla odwiedzających.
- Zmień hasła do WordPressa, hostingu, SFTP, bazy danych i poczty powiązanej z administracją. Zrób to z bezpiecznego urządzenia.
- Sprawdź konta administratorów, klucze dostępu, nietypowe zadania cron, przekierowania i ostatnio zmienione pliki.
- Ustal prawdopodobną przyczynę, na przykład podatną wtyczkę, wyciek hasła, błędny upload albo lukę w konfiguracji.
- Przywróć stronę z kopii wykonanej przed infekcją, jeśli możesz potwierdzić jej czystość.
- Zaktualizuj WordPress Core, wtyczki, motyw oraz środowisko serwera i usuń nieużywane dodatki.
- Sprawdź formularze, katalogi uploadów, uprawnienia plików i logi, aby nie odtworzyć tej samej drogi ataku.
Jeśli nie wiesz, kiedy doszło do infekcji albo nie masz pewnego backupu, nie przywracaj strony na ślepo. Kopia wykonana po włamaniu może zawierać złośliwy kod. Przy poważnej infekcji, braku kopii lub podejrzeniu RCE, czyli zdalnego wykonania kodu, potrzebna jest analiza specjalisty.
Kontrola bezpieczeństwa raz w miesiącu
Raz w miesiącu przeprowadź krótki przegląd administracyjny. Pozwala wykryć zaniedbania, zanim staną się problemem:
- sprawdź aktualność Core WordPressa, wtyczek, motywów i PHP,
- przejrzyj listę użytkowników oraz poziomy ich uprawnień,
- usuń nieużywane wtyczki, motywy i konta,
- potwierdź, że ostatni backup obejmuje bazę i pliki,
- wykonaj próbne przywracanie kopii w środowisku testowym,
- sprawdź logowania, zmiany plików, formularze i nietypowe przekierowania.
Bezpieczeństwo WordPressa nie polega na znalezieniu jednego ustawienia, które rozwiąże każdy problem. Największą różnicę robi stały proces: szybkie aktualizacje, ograniczony dostęp, minimalna liczba dodatków, HTTPS, kopie przechowywane poza serwerem oraz gotowa procedura reakcji na incydent.