Przejdź do treści
WordPress i Strony WWW Rozwiązanie problemu

WordPress zhackowany – jak wyczyścić malware w 2026

Opublikowano: 8 kwietnia 2026

Piątek wieczór, telefon od klienta: "strona nie działa, Google pokazuje ostrzeżenie, a do mnie dzwonią znajomi, że ich przekierowuje na jakieś rosyjskie kasyno". Jeśli prowadzisz stronę na WordPress wystarczająco długo, to taka wiadomość to kwestia czasu – nie tego czy, ale kiedy. Dobra wiadomość: w większości przypadków da się to wyczyścić w kilka godzin bez utraty treści. Zła: trzeba działać szybko, bo im dłużej strona siedzi z malware, tym większe straty w zaufaniu Google i klientów. Poniżej prowadzę Cię przez dokładnie tę samą procedurę, której używam przy sprzątaniu zhackowanych stron klientów – od rozpoznania objawów, przez izolację, aż po odbudowę reputacji w wyszukiwarce.

Krótka odpowiedź

Zhackowany WordPress poznasz po: przekierowaniach do obcych domen, ostrzeżeniu Google Safe Browsing, komunikacie "Hacked content detected" w Search Console, nieznanych plikach .php w uploads, dodatkowych kontach admina w bazie oraz obciążeniu CPU na hostingu. Procedura czyszczenia: zrób backup zainfekowanej wersji, zmień wszystkie hasła (admin, FTP, baza, hosting), przeskanuj stronę Wordfence lub Sucuri, reinstaluj core przez WP-CLI, podmień wtyczki na świeże z wordpress.org, wyczyść bazę z podejrzanych opcji i użytkowników, a na koniec złóż prośbę o ponowne sprawdzenie w Google Search Console.

Usługi KC Mobile

Sprawdź naszą ofertę

Potrzebujesz pomocy specjalisty? Skorzystaj z naszych usług i rozwiń swój biznes online.

Jak rozpoznać, że strona została zhackowana – objawy infekcji

Większość włamań na WordPressa nie jest spektakularna. Atakujący nie chcą zniszczyć Twojej strony – chcą jej używać do swoich celów i zostać tam jak najdłużej niezauważeni. Dlatego objawy bywają subtelne.

Czerwone flagi, na które trzeba reagować natychmiast:

  • Strona przekierowuje użytkowników na obce adresy – często tylko z wyników Google albo tylko na urządzeniach mobilnych, co utrudnia wykrycie. Sprawdź w trybie incognito z różnych źródeł ruchu.
  • Chrome lub Firefox wyświetla pełnoekranowy czerwony komunikat "Ta strona może być niebezpieczna" – to znak, że Google Safe Browsing już oznaczył Twoją domenę. Ruch organiczny w tym momencie praktycznie znika.
  • W Google Search Console, w sekcji Bezpieczeństwo i działania ręczne, pojawia się powiadomienie typu "Hacked content detected" lub "Cloaking". GSC pokazuje przykładowe zainfekowane URL-e.
  • Hosting raportuje nagle wyższe zużycie CPU, RAM-u albo wysyłanie setek e-maili z Twojego serwera (spam). To klasyczny objaw, że strona została włączona do botnetu.
  • W panelu WordPress widzisz użytkownika administratora, którego nie znasz – często z nazwą losową, typu "wp_admin_7x3q" albo podszywającego się pod nazwę zbliżoną do Twojej.
  • W katalogu wp-content/uploads/ pojawiają się pliki .php (a powinny być tylko obrazy), często z losowymi nazwami jak "x7a9b.php" albo "wp-config-sample.php" w nietypowych miejscach.

Jeśli widzisz choć jeden z tych sygnałów – traktuj stronę jako zainfekowaną i przejdź do izolacji. Nie czekaj, aż "samo się naprawi", bo nie naprawi.

7 najczęstszych wektorów ataku – jak dostali się na Twoją stronę

Zanim zaczniesz czyścić, warto zrozumieć, jak atakujący wszedł – bo jeśli nie załatasz dziury, za tydzień będziesz sprzątał drugi raz. W praktyce 90 procent włamań na WordPressa wynika z siedmiu powodów.

1. Słabe hasło administratora. Loginy typu "admin" z hasłem "Firma2024" padają w kilka godzin od brute force. Boty próbują tysiące kombinacji na minutę, a bez limitu logowań serwer zgadza się na wszystkie próby.

2. Niezaktualizowane wtyczki. Historyczne podatności w Elementor Pro, File Manager, Revolution Slider czy LiteSpeed Cache pozwalały przejąć stronę bez logowania. Jeśli od miesięcy nie klikałeś "Aktualizuj" – masz problem.

3. Nulled themes i plugins. Darmowe, pirackie wersje komercyjnych wtyczek z forów typu "nulled premium" prawie zawsze zawierają backdoora. Oszczędność 200 zł rocznie, strata – cała reputacja.

4. Stara wersja core WordPress. Wersje poniżej 6.0 mają znane publicznie luki. Jeśli Twoja strona siedzi na 5.8 od trzech lat, to nie pytanie czy, tylko kiedy.

5. Brak 2FA i brak limitu prób logowania. Bez wtyczki ograniczającej liczbę nieudanych logowań atakujący ma nieskończone próby. Bez 2FA nawet silne hasło, jeśli wycieknie, wystarczy.

6. Shared hosting bez izolacji. Na tanim, współdzielonym hostingu infekcja sąsiedniej strony potrafi przeskoczyć na Twoją przez wspólny katalog tymczasowy albo źle ustawione uprawnienia. Dobry hosting WordPress to także kwestia bezpieczeństwa.

7. Formularze uploadu bez walidacji. Wtyczki pozwalające użytkownikom przesyłać pliki (CV, zdjęcia, dokumenty) bez sprawdzania typu i zawartości to otwarte drzwi. Atakujący przesyła plik "zdjecie.php.jpg", a serwer wykonuje go jako skrypt.

W czasie czyszczenia wróć do tej listy i sprawdź, który punkt Cię dotyczy – to podpowie, gdzie szukać faktycznej dziury.

Potrzebujesz szybkiej pomocy?

Naprawimy problem za Ciebie. Bezpłatna diagnoza i wycena naprawy w ciągu 24h.

Krok 1: backup zainfekowanej strony i izolacja – zanim zaczniesz czyścić

Pierwszy odruch po zobaczeniu włamania to "usunąć wszystko". To błąd. Zainfekowane pliki są dowodem – pokażą Ci, co i jak atakujący zrobił, a czasem pomogą odzyskać informacje z bazy, jeśli coś pójdzie nie tak.

Procedura pierwszych 15 minut:

1. Zrób pełny backup przez panel hostingu – zarówno plików, jak i bazy danych. Oznacz go jako "HACKED-{data}" i trzymaj osobno. Nigdy nie nadpisuj czystego backupu zainfekowaną kopią.
2. Jeśli masz dostęp do starszego, czystego backupu sprzed infekcji – świetnie, ale nie przywracaj go od razu. Najpierw zbadaj, jak włamanie nastąpiło, bo inaczej przywrócisz stronę tylko po to, by za dwa dni wróciło to samo.
3. Włącz tryb konserwacji albo tymczasowo podmień index.php na prostą stronę "Strona w trakcie konserwacji, wracamy wkrótce". To chroni użytkowników przed dalszym narażeniem na malware i sygnalizuje Google, że pracujesz nad problemem.
4. W .htaccess zablokuj wszystkie IP poza swoim – używając reguł Order Deny,Allow, Deny from all i Allow from Twoje.IP. Atakujący nie będzie mógł reaktywować backdoora, gdy go wyczyścisz.
5. Powiadom hosting – wielu providerów (szczególnie CyberFolks czy LH.pl) ma zespoły bezpieczeństwa, które pomagają przy incydentach i mogą dostarczyć logi serwera.

Dopiero po tych krokach przechodzisz do faktycznego czyszczenia.

Krok 2: zmiana wszystkich haseł i sekretów – zanim ruszysz pliki

Czyszczenie plików bez zmiany haseł jest bezużyteczne – atakujący ma Twoje dane logowania i po prostu wróci. Dlatego hasła zmieniamy w drugim kroku, przed jakąkolwiek ingerencją w kod. To moment, w którym najczęściej ludzie się potykają – zmieniają tylko hasło do panelu WordPress, a zapominają o reszcie. Atakujący potem wraca przez FTP, bazę albo niewyczyszczony token API.

Lista haseł do podmiany (wszystkie, nie tylko admin):

  • Hasła wszystkich użytkowników WordPress z rolą Administrator, Edytor i Autor. Zmień przez bazę lub WP-CLI, bo panel może być skompromitowany i atakujący widzi Twoje nowe hasło w momencie wpisania.
  • Hasło do bazy danych MySQL – w panelu hostingu, a następnie aktualizacja w wp-config.php. Po zmianie strona przestanie działać na kilka minut, dopóki nie podmienisz pliku konfiguracyjnego.
  • Hasło do FTP lub SFTP i SSH. Większość hostingów ma osobne konta dla każdego protokołu – zmień wszystkie.
  • Hasło do panelu hostingu (cPanel, DirectAdmin, CloudPanel). Tu atakujący ma dostęp do logów serwera i może zobaczyć Twoje ruchy.
  • Klucze SECRET_KEY w wp-config.php – wygeneruj nowe na api.wordpress.org/secret-key/1.1/salt/. To wyloguje wszystkie sesje WordPress, w tym sesję atakującego, nawet jeśli ma ciasteczko.
  • Tokeny API (Stripe, PayU, BaseLinker, Allegro) – jeśli masz sklep, atakujący mógł skopiować klucze i używać ich do oszustw finansowych, nawet po wyczyszczeniu Twojej strony.

Hasła generuj losowo, minimum 20 znaków, przez menedżer typu Bitwarden czy 1Password. Nie używaj ponownie żadnego, które wcześniej było na tej stronie – nawet jeśli wygląda na silne.

Krok 3: skan automatyczny – Wordfence, Sucuri, MalCare

Po zmianie haseł uruchamiamy skan automatyczny. To nie zastąpi ręcznego sprawdzenia, ale pokazuje gros infekcji w 10 minut i oszczędza godziny ręcznej pracy. Traktuj to jako szybkie zawężenie terenu – skanery pokażą Ci, gdzie na pewno jest śmieć, a resztę sprawdzisz później już z konkretną listą podejrzanych miejsc.

Trzy narzędzia, których używam najczęściej:

Wordfence (free + premium). Wtyczka instalowana bezpośrednio w WordPress. Skanuje wszystkie pliki core, motywy i wtyczki, porównuje je z oryginałami z repozytorium wordpress.org i pokazuje różnice bajt po bajcie. Darmowa wersja wystarcza do jednorazowego czyszczenia. Włącz też firewall w trybie Learning Mode, żeby zaczął uczyć się normalnego ruchu.

Sucuri SiteCheck. Darmowy skaner zewnętrzny pod adresem sitecheck.sucuri.net. Sprawdza stronę z zewnątrz, wykrywa przekierowania, blacklisty (Google, Norton, McAfee), złośliwy JavaScript wstrzyknięty do frontu. Uzupełnienie Wordfence – łapie rzeczy, których wtyczka od środka nie widzi.

MalCare. Wtyczka specjalizująca się w wykrywaniu backdoorów, których Wordfence czasem nie widzi (szczególnie te obfuskowane przez base64 i gzinflate). Wersja płatna oferuje automatyczne czyszczenie za kilka kliknięć – przydatne, gdy nie chcesz ręcznie dłubać w kodzie.

Uruchom wszystkie trzy – każdy łapie trochę inne rzeczy. Zapisz raporty i przejdź do fazy ręcznej.

Krok 4: ręczne czyszczenie core, wtyczek i motywu

Skanery automatyczne wyłapują znane wzorce, ale doświadczony atakujący zostawia coś własnego, zakopanego w core albo w nietypowym miejscu. Dlatego ręczna inspekcja jest obowiązkowa.

Procedura WP-CLI, którą polecam (10 minut pracy):

1. Zaloguj się przez SSH i przejdź do katalogu strony.
2. Pobierz świeże pliki core, zastępując istniejące – polecenie wp core download z flagą --force i --skip-content. Flaga --skip-content chroni katalog wp-content, żebyś nie stracił motywów i uploadów. To usuwa wszystkie zmodyfikowane pliki rdzenia WordPress.
3. Usuń wtyczki hurtem i zainstaluj je od nowa z repozytorium (wp plugin list w parze z wp plugin delete i wp plugin install). Instaluj tylko z oficjalnych źródeł – wordpress.org albo bezpośrednio od producenta. Nigdy z "nulled" forów.
4. Motyw najlepiej pobrać świeży od autora. Jeśli masz child theme z własnymi zmianami, porównaj go wersja po wersji z backupem i przenieś tylko potwierdzone pliki.
5. Sprawdź wp-config.php pod kątem dziwnych wpisów – szczególnie linie z eval, base64_decode, gzinflate albo zmienne o losowych nazwach na początku pliku. To klasyczne obfuskacje backdoorów.
6. Plik .htaccess często zawiera przekierowania do obcych domen – porównaj go z domyślnym plikiem WordPress i usuń wszystko podejrzane.
7. Przejdź katalog wp-content/uploads/ i usuń wszystkie pliki .php (find wp-content/uploads -name plik.php -delete). Obrazy nie potrzebują PHP – jeśli tam siedzi, to backdoor.

Jeśli nie masz dostępu do SSH i WP-CLI, podobne operacje możesz wykonać przez FileZilla i ręczne usuwanie – tylko zajmie to 2-3 razy dłużej. W razie problemów z samym core zajrzyj do poradnika o błędzie 500 w WordPress.

Krok 5: czyszczenie bazy danych – użytkownicy, opcje, treść

Malware lubi się chować w bazie danych, bo skanery plików ignorują zawartość MySQL. To drugie miejsce, gdzie atakujący zostawiają backdoory – w tabeli wp_options, wp_users albo wstrzyknięte w treść wpisów.

Co sprawdzić w bazie (WP-CLI albo phpMyAdmin):

Użytkownicy administratorzy. Wylistuj wszystkich adminów komendą wp user list --role=administrator. Usuń każdego, którego nie rozpoznajesz. Zwróć uwagę na użytkowników z pustym adresem e-mail albo z domenami typu @tempmail, @guerrilla – to znaki alarmowe.

Tabela wp_options. Sprawdź wpisy z autoload=yes, które mogą zawierać złośliwy kod wykonywany przy każdej wizycie – komenda wp option list --autoload=on pokaże listę. Opcje o podejrzanych nazwach (losowe ciągi, "wp_cd", "class_gen") i zawartości wyglądającej na base64 – usuń.

Treść wpisów i stron. Przeszukaj wp_posts pod kątem iframe'ów, ukrytych linków i obfuskowanego JavaScript – zapytanie SQL typu SELECT ID, post_title FROM wp_posts WHERE post_content LIKE z iframe albo eval. Każdy znaleziony rekord przejrzyj ręcznie i wyczyść.

Zaplanowane zadania (cron). WordPress cron bywa wykorzystywany do regularnego odpalania backdoora – wylistuj zadania przez wp cron event list. Zadania o nazwach, których nie rozpoznajesz – usuń.

Po wszystkim zrób nowy backup czystej bazy i zapisz go osobno. To będzie Twój punkt odniesienia, jeśli kiedyś znów coś się stanie.

Krok 6: Google Search Console i odbudowa reputacji

Czysta strona to dopiero połowa sukcesu. Druga połowa to przekonanie Google, że to już nie pułapka. Bez tego ruch organiczny nie wróci, bo użytkownicy widzą czerwony ekran ostrzeżenia zamiast Twojej oferty.

Procedura w Google Search Console (po czyszczeniu):

1. Wejdź do sekcji Bezpieczeństwo i działania ręczne. Jeśli widzisz powiadomienie "Hacked content" czy "Malware", kliknij "Prośba o sprawdzenie".
2. W formularzu opisz konkretnie: co zrobiłeś, jakie pliki usunąłeś, jakie hasła zmieniłeś, jakie wtyczki podmieniłeś. Google ceni konkrety – "naprawiliśmy" to za mało.
3. Złóż prośbę i czekaj – weryfikacja trwa od 24 godzin do kilku dni. W tym czasie nie wprowadzaj żadnych zmian w strukturze.
4. Sprawdź domenę w Google Transparency Report i Sucuri SiteCheck – oba serwisy pokazują, czy blacklisty (Norton, McAfee, ESET) zdjęły flagę.
5. Prześlij sitemap ponownie w GSC, żeby przyspieszyć ponowne indeksowanie. Jeśli Twoja strona była przez jakiś czas offline, część URL-i mogła wypaść z indeksu.

Odbudowa rankingów zajmuje 2-6 tygodni po zdjęciu flagi. W tym czasie monitoruj pozycje kluczowych fraz i bądź cierpliwy – pełny powrót ruchu do poziomu sprzed ataku to zwykle 1-3 miesiące. Jeśli doszło do poważnych strat SEO, rozważ audyt cyfrowy, który pokaże, co jeszcze warto naprawić technicznie.

Profilaktyka – jak zabezpieczyć WordPress po czyszczeniu

Wyczyszczenie strony bez wzmocnienia zabezpieczeń to tylko przesunięcie problemu o kilka tygodni. Po incydencie obowiązkowo wprowadź sześć rzeczy, które wykluczają 95 procent przyszłych ataków.

1. Wordfence w wersji co najmniej darmowej, z włączonym firewallem i automatycznymi skanami co 24 godziny. Alerty o zmianach w plikach core – włącz.

2. Dwuskładnikowa autoryzacja (2FA) dla wszystkich adminów. Wtyczki Wordfence Login Security albo Two Factor (oficjalna od WP core team) dodają obsługę TOTP (Google Authenticator). Bez 2FA samo hasło nie wystarczy, nawet jeśli wycieknie.

3. Limit prób logowania. Maksymalnie 5 nieudanych prób w 10 minut, potem blokada IP na godzinę. Zwalnia brute force z tysięcy prób na minutę do zera.

4. Automatyczne aktualizacje. Włącz auto-updates dla core, wtyczek i motywów. Kolejna opcja, której nie powinieneś wyłączać: automatyczne drobne aktualizacje bezpieczeństwa (są domyślnie włączone, upewnij się, że tak zostało).

5. Codzienny backup. UpdraftPlus albo lepiej – backup poziomu serwera u hostingu. Trzymaj kopie 30 dni wstecz, na zewnętrznym zasobie (nie na tym samym serwerze).

6. Staging do testów. Zanim aktualizujesz core albo dużą wtyczkę, przetestuj zmianę na środowisku kopii. Większość dobrych hostingów ma staging w jednym kliknięciu – jeśli Twój nie ma, to argument za zmianą hostingu.

Te sześć rzeczy wdrożysz w godzinę. Jeśli potrzebujesz pomocy z kompleksowym zabezpieczeniem firmowej strony internetowej, możemy to zrobić w ramach jednorazowej usługi.

Kiedy DIY wystarczy, a kiedy dzwonić po specjalistę

Nie każde włamanie trzeba oddawać specjaliście – i nie każde można rozwiązać samemu. Oto szczera granica, którą widzę po kilkudziesięciu przypadkach.

Zrób samemu (koszt: 0 zł, czas: 2-5 godzin), jeśli:
- strona to blog albo proste portfolio bez sklepu
- masz świeży, czysty backup sprzed infekcji
- skaner Wordfence pokazuje konkretne pliki do wyczyszczenia
- rozumiesz podstawy SSH, WP-CLI i FTP
- strona nie jest w tej chwili głównym źródłem przychodu

Wezwij specjalistę (koszt: 500-3000 zł, czas: 1-3 dni), jeśli:
- to sklep WooCommerce z aktywną sprzedażą – każda godzina przestoju to stracone zamówienia
- nie masz backupu i boisz się, że własne czyszczenie zniszczy treść
- Wordfence znalazł backdoory, ale wracają po usunięciu
- Google oznaczył domenę i nie wiesz, jak złożyć prośbę o sprawdzenie
- widziałeś w logach próby ataków na serwer pod kątem innych stron – może być szerszy problem z hostingiem

Stawki rynkowe w Polsce (2026):

  • Szybkie czyszczenie podstawowe: 500-1000 zł
  • Pełne czyszczenie z hardeningiem: 1200-2000 zł
  • Sklep WooCommerce z dużą bazą klientów: 2000-3000 zł
  • Pełny audyt po incydencie i długoterminowa ochrona: 3000-5000 zł

W pilnych przypadkach – gdy strona firmowa jest offline i tracisz klientów – napisz do nas przez formularz kontaktowy albo zadzwoń. Zwykle udaje nam się zacząć czyszczenie w ciągu godziny od zgłoszenia.

Wspomniane narzędzia

Wordfence Sucuri SiteCheck MalCare WP-CLI UpdraftPlus Google Search Console Bitwarden

Potrzebujesz pomocy z WordPress?

Tworzymy i naprawiamy strony na WordPress. Optymalizacja prędkości, bezpieczeństwo, aktualizacje. 500+ zrealizowanych projektów.

Najczęściej zadawane pytania

Jak szybko poznać, że WordPress jest zhackowany?
Wejdź na stronę z trybu incognito i z urządzenia mobilnego – malware często uderza tylko w ruch organiczny albo tylko w komórki. Sprawdź Google Search Console w sekcji Bezpieczeństwo. Zerknij do panelu hostingu na wykres CPU za ostatnie 48 godzin – nagły skok wskazuje na botnet. Zeskanuj domenę przez sitecheck.sucuri.net, który pokazuje blacklisty i podejrzany kod.
Czy po włamaniu trzeba usuwać całą stronę i stawiać od zera?
Zwykle nie. W większości przypadków wystarczy reinstalacja core WordPress, podmiana wtyczek na świeże i wyczyszczenie bazy z podejrzanych wpisów. Treść (posty, strony, media) da się uratować. Stawiać od zera trzeba tylko wtedy, gdy infekcja jest bardzo głęboka, nie ma backupu, a atakujący siedział w systemie miesiącami i zmodyfikował dziesiątki plików w trudnych do namierzenia miejscach.
Ile kosztuje profesjonalne wyczyszczenie zhackowanego WordPress?
W polskich warunkach 2026 roku stawki wyglądają tak: podstawowe czyszczenie zwykłej strony firmowej to 500-1000 zł, pełne czyszczenie z hardeningiem i zabezpieczeniem na przyszłość 1200-2000 zł, a sklep WooCommerce z dużą bazą klientów i aktywną sprzedażą 2000-3000 zł. Czas realizacji od jednej doby (pilne przypadki) do trzech dni (z pełnym audytem).
Czy Wordfence wystarczy, żeby wyczyścić zainfekowaną stronę?
Wordfence wyłapuje większość popularnych infekcji i wystarcza w prostych przypadkach. W poważniejszych włamaniach (backdoory, modyfikacje bazy, malware ukryte w treści wpisów) trzeba dołożyć ręczną inspekcję przez WP-CLI albo drugi skaner typu MalCare. Sama wtyczka nie rozwiąże też problemu z kontem administratora utworzonym przez atakującego – tego musisz pilnować w bazie.
Czy Google usunie ostrzeżenie po wyczyszczeniu strony?
Tak, ale nie automatycznie. Po czyszczeniu musisz wejść do Google Search Console, sekcja Bezpieczeństwo i działania ręczne, i ręcznie złożyć prośbę o ponowne sprawdzenie. W formularzu opisz konkretnie, co zrobiłeś. Weryfikacja trwa od 24 godzin do kilku dni. Dopiero po akceptacji Google zdejmuje flagę Safe Browsing i ruch organiczny zaczyna wracać.
Jak długo trwa powrót ruchu SEO po wyczyszczeniu malware?
Po zdjęciu flagi Google Safe Browsing ruch zaczyna wracać w ciągu 2-6 tygodni, ale pełne odzyskanie pozycji sprzed ataku zajmuje najczęściej 1-3 miesiące. Zależy od tego, jak długo strona siedziała z malware i ile URL-i wypadło z indeksu. Przyspiesz proces przez ponowne przesłanie sitemap i monitoring pozycji kluczowych fraz.
#wordpress#bezpieczeństwo#malware#hacking#wordfence#sucuri#wp-cli#incident response
Zdjęcie autora: Krzysztof Czapnik
O autorze

Krzysztof Czapnik

CEO KC Mobile

20+ lat doświadczenia w digital marketingu i tworzeniu stron internetowych. Specjalizuję się w SEO, kampaniach Google Ads oraz budowaniu skutecznych strategii online dla firm z całej Polski.

Potrzebujesz pomocy?

Potrzebujesz szybkiej pomocy?

Naprawimy problem za Ciebie. Bezpłatna diagnoza i wycena naprawy w ciągu 24h.

Bezpłatna wycena