Bezpieczeństwo & administracja stron

WordPress zhakowany – co teraz? Procedura ratowania witryny krok po kroku

Czytasz to w trybie alarmowym — Twoja witryna pokazuje obce treści, Google ostrzega „Strona zawiera malware”, klient wściekły. Spokojnie. Większość włamań na WP da się naprawić w 4–8 godzin, jeśli wykonasz dokładnie poniższe kroki. Przeszliśmy przez to z 30+ klientami — wiem, co działa.

W skrócie

  • Pierwsze 30 minut: nie panikuj, włącz tryb maintenance.
  • Pierwsze 2 godziny: diagnostyka i identyfikacja źródła ataku.
  • Pierwsze 4 godziny: czyszczenie malware lub przywrócenie backupu.
  • Pierwsze 24 godziny: hardening + zgłoszenie do Google + monitoring.
  • Tygodniowo po: weryfikacja, że atakujący nie ma backdoora.

Sygnały, że Twój WordPress został zhakowany

🚨 Pewne objawy:

  • Wpisy / strony, których nie publikowałeś
  • Linki do „viagra”, „casino”, „pożyczki” w treści
  • Twoja strona robi przekierowanie na obcą domenę
  • Google Chrome pokazuje „This site may harm your computer”
  • W Search Console powiadomienie „Manual action: Hacked content”
  • Hosting wysłał email „Wykryliśmy malware na Twoim koncie”
  • Strona ładuje się dziwnie wolno
  • W panelu WP nowi użytkownicy z rolą Administrator
  • Antywirus (na komputerze) blokuje stronę przy próbie wejścia

⚠️ Możliwe objawy:

  • Niewytłumaczalny spadek ruchu w GA
  • Klienci zgłaszają, że paczka z spam-treściami w mailu
  • Widzisz inne pliki w /wp-content/uploads niż wgrałeś

KROK 1: Pierwsze 30 minut — opanowanie sytuacji

1.1 Włącz tryb maintenance

Nie możesz zostawić zainfekowanej strony online — Google szybciej ukara, klienci stracą zaufanie.

Opcja A: Wtyczka WP Maintenance Mode (jeśli jeszcze masz dostęp do panelu).

Opcja B: Hosting → cPanel → Wstaw plik index.html w root z prostą wiadomością:

<h1>Strona w przerwie technicznej</h1>
<p>Wracamy w ciągu kilku godzin.</p>

Opcja C: W .htaccess:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^TWOJ_IP$
RewriteRule .* /maintenance.html [R=503,L]

1.2 Zmień WSZYSTKIE hasła

Natychmiast:
– Hasło administratora WP
– Hasło panelu hostingu (cPanel)
– Hasło FTP
– Hasło bazy MySQL
– Hasło email administratora (ważne, bo na ten email idą resety haseł!)
– API keys (Stripe, PayU, GoogleMaps, Google Analytics)

Każde hasło inne, min. 16 znaków, z menedżera haseł.

1.3 Zrób kopię zhakowanej witryny (do analizy)

Brzmi dziwnie, ale przed czyszczeniem zachowaj kopię stanu zhakowanego. Może być potrzebna do:
– Identyfikacji wektora ataku
– Dowodu w przypadku zgłoszenia kradzieży tożsamości
– Audytu post-mortem

Cała kopia: pliki + baza danych. Trzymaj na zewnętrznym dysku.

1.4 Wyłącz auto-deploy / cron

Jeśli masz CI/CD lub jakiekolwiek auto-deploye z Gita — wyłącz. Atak może być w repozytorium.

KROK 2: 2 godziny — diagnostyka

2.1 Zalogowanie po stronie hostingu

Jeśli administrator WP nie działa, użyj phpMyAdmin (cPanel → bazy danych).

SELECT * FROM wp_users WHERE user_login = 'twoj_admin';

Sprawdź, czy email i hasło nie zostały zmodyfikowane.

Jeśli zostały:

UPDATE wp_users 
SET user_pass = MD5('NoweHaslo123!@#') 
WHERE user_login = 'twoj_admin';

(WordPress przy następnym zalogowaniu zaszyfruje hasło bezpiecznie — MD5 używa się tylko do tej akcji ratunkowej.)

2.2 Sprawdź użytkowników z rolą Administrator

SELECT u.user_login, u.user_email, m.meta_value 
FROM wp_users u 
JOIN wp_usermeta m ON u.ID = m.user_id 
WHERE m.meta_key = 'wp_capabilities' 
  AND m.meta_value LIKE '%administrator%';

Każdy admin, którego nie znasz = haker. Usuń, ale zachowuj wpisy do raportu.

2.3 Skanuj pliki malware

Online (zewnętrzny skan):

Wewnętrzny skan:

  • Wordfence Free — Tools → Scan
  • MalCare — wtyczka, robi skan + auto-clean
  • WPScan — narzędzie command-line dla zaawansowanych

2.4 Sprawdź najbardziej podejrzane miejsca

Atakujący najczęściej zostawiają malware w:

  • /wp-content/uploads/ — pliki PHP, których tam nie powinno być
  • /wp-content/plugins/ — fałszywe wtyczki (np. „wp-vcd”, „wpfm-bg”)
  • /wp-content/themes/[motyw]/functions.php — wstrzyknięty kod
  • /wp-config.php — sprawdź, czy nie ma extra <?php eval(...)?>
  • wp-cron.php — zmodyfikowany
  • .htaccess — przekierowania na obce domeny

2.5 Sprawdź logi serwera

cPanel → Statistics → Latest Visitors. Szukaj:
– Niezwykłych żądań POST do wp-login.php
– Dużej liczby żądań z jednego IP
– Żądań do wp-content/uploads/[plik].php

Zapisz IP atakującego — przyda się do raportu.

KROK 3: 4 godziny — czyszczenie

Opcja A: Przywrócenie backupu (zalecane)

Jeśli masz backup sprzed włamania:

  1. Pobierz backup z UpdraftPlus / hostingu
  2. Wykasuj wszystko z konta hostingu (wp-content, wp-includes, wp-admin, baza)
  3. Wgraj świeży WordPress core
  4. Wgraj backup wp-content
  5. Importuj backup bazy
  6. Sprawdź, czy daty wpisów / aktywność admina pasują do „przed włamaniem”

Jeśli nie wiesz, kiedy nastąpiło włamanie:

Sprawdź pliki — które mają datę modyfikacji niezgodną z resztą? (Linux: find . -mtime -7 — pliki zmodyfikowane w ostatnie 7 dni.)

Opcja B: Manualne czyszczenie (bez backupu)

To trudniejsze. Najpierw rozważ pomoc profesjonalisty.

Kroki:
1. Pobierz świeży WordPress z wordpress.org/download
2. Zastąp folder wp-admin i wp-includes świeżymi
3. NIE nadpisuj wp-content (tam są Twoje treści)
4. Pobierz każdą zainstalowaną wtyczkę z oficjalnego repozytorium na nowo
5. Pobierz motyw z oficjalnego źródła na nowo
6. Sprawdź wp-config.php — usuń wstrzyknięty kod
7. Zaktualizuj klucze sekretne (api.wordpress.org/secret-key/1.1/salt/)
8. W bazie danych sprawdź tabele wp_options (key = siteurl, home — czy nie zmienione na obcą domenę)

Opcja C: Profesjonalne usługi

  • Sucuri — czyszczenie malware za 199 USD jednorazowo + monitoring
  • MalCare — automatyczne, od 99 USD/rok
  • WordFence Care — premium, premium support włącza się w godzinę

Dla biznesów średnich/dużych — to najszybsza droga.

KROK 4: 24 godziny — hardening po włamaniu

Po wyczyszczeniu:

4.1 Zaktualizuj wszystko

WordPress core, wszystkie wtyczki, motyw — najnowsze stabilne wersje.

4.2 Wzmocnij zabezpieczenia

Wykonaj wszystkie 12 kroków z poradnika zabezpieczeń.

4.3 Zgłoś Google

Search Console → Problemy bezpieczeństwa → „Poproś o sprawdzenie”. Google ponownie zeskanuje stronę i (jeśli czysta) zdejmie ostrzeżenie. Czas: 24–72 godziny.

4.4 Powiadom klientów

Jeśli wyciekły dane klientów (formularz kontaktowy, baza WooCommerce) — zgodnie z RODO masz 72 godziny na zgłoszenie do UODO + powiadomienie poszkodowanych.

4.5 Dokumentacja

Zapisz:
– Datę włamania (orientacyjnie)
– Wektor ataku
– Co zostało zmienione
– Jak naprawiono
– Plan zabezpieczeń

Dla audytu, ubezpieczyciela, prawnika.

KROK 5: Tydzień po — monitoring

5.1 Codzienny skan Wordfence

Pierwszy tydzień: skanuj codziennie. Hakerzy często zostawiają drugi backdoor — chcą wrócić.

5.2 Monitor logowania

Sprawdzaj Wordfence → Live Traffic. Każde nieautoryzowane logowanie = sygnał do działania.

5.3 Re-skan zewnętrzny

Co tydzień Sucuri SiteCheck przez 4 tygodnie.

5.4 Weryfikacja Google

GSC → Pokrycie → Indeksacja. Sprawdź, czy wszystkie strony są ponownie indeksowane.

Czego się nauczyłem z 30+ „ratowanych” witryn

  1. 80% włamań to zaniedbanie aktualizacji — wtyczka miała patcha 6 miesięcy temu
  2. Backup off-site to jedyna rzecz, która zawsze działa — kluczowa inwestycja
  3. Zhakowani próbują się tłumaczyć „to jest kradzież” — niestety, jeśli były słabe hasła, to też Twoja wina
  4. Czas reakcji decyduje — atak wykryty w 1 godzinę naprawia się w 4 godziny. Wykryty po tygodniu — w 4 dni
  5. Profesjonalna pomoc się opłaca — 1 000 zł na profesjonalne czyszczenie vs ryzyko utraty marki

Co dalej

Jeśli nie jesteś w trybie alarmowym, ale przeczytałeś to „na zapas” — gratulacje, mądre podejście. Wprowadź teraz:

  1. Backup off-site (UpdraftPlus → Google Drive)
  2. 2FA dla wszystkich administratorów
  3. Wordfence Free
  4. Plan reakcji (kogo dzwonić, jeśli się wydarzy)

Mamy „Czerwoną linię” dla zhakowanych — odpowiadamy w 1 godzinę, czyścimy w 24, gwarantujemy stabilność. Skontaktuj się (telefon zalecany w trybie alarmowym).

Pomógł Ci ten artykuł?

Podziel się z innymi

Masz konkretny projekt?

Pogadajmy o Twojej stronie.

Bezpłatna 30-minutowa konsultacja, brief i indywidualna wycena w ciągu 24 godzin roboczych. Bez handlowca — odpisuje Adrian.

Wyceń projekt
Cześć! 👋 Jestem Websky Bot, asystent AI Websky. W czym Ci pomóc?