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/uploadsniż 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):
- Sucuri SiteCheck — darmowy, 30 sekund
- Quttera — darmowy
- Google Search Console → Problemy bezpieczeństwa
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:
- Pobierz backup z UpdraftPlus / hostingu
- Wykasuj wszystko z konta hostingu (wp-content, wp-includes, wp-admin, baza)
- Wgraj świeży WordPress core
- Wgraj backup wp-content
- Importuj backup bazy
- 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
- 80% włamań to zaniedbanie aktualizacji — wtyczka miała patcha 6 miesięcy temu
- Backup off-site to jedyna rzecz, która zawsze działa — kluczowa inwestycja
- Zhakowani próbują się tłumaczyć „to jest kradzież” — niestety, jeśli były słabe hasła, to też Twoja wina
- Czas reakcji decyduje — atak wykryty w 1 godzinę naprawia się w 4 godziny. Wykryty po tygodniu — w 4 dni
- 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:
- Backup off-site (UpdraftPlus → Google Drive)
- 2FA dla wszystkich administratorów
- Wordfence Free
- 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).



