WordPress

Zainfekowany WordPress? Jak odwirusować stronę i nie dać się zhakować ponownie

Kiedy klient dzwoni z informacją, że jego sklep przekierowuje na lewe apteki, a Google właśnie oznaczyło stronę jako niebezpieczną - mamy mniej więcej 24 godziny, żeby uratować biznes. Po tym czasie pozycje w wyszukiwarce zaczynają się sypać, a koszty rosną lawinowo. Pokażę Ci dokładnie, co robić w takiej sytuacji i czego nigdy nie próbować na własną rękę.

u2844336958 website virus --ar 43 --seed 1690059254 --sref 16 c507d6a3-071e-4f50-b28f-ac849ae32a72 1
Data dodania
Aktualizacja
Autor artykułu
Damian Tokarczyk
Czas czytania8 minut

Spis treści

Kluczowe wnioski

  1. Pierwsza godzina decyduje o skali strat - nie próbuj naprawiać strony po FTP w panice. Najgorsze, co można zrobić, to wgrać stary backup (też jest skażony) albo wycinać kod „na czuja”.

  2. 90% włamań wchodzi przez wtyczki i motywy, nie przez sam rdzeń WordPressa. Wtyczki porzucone przez deweloperów to największe ryzyko - trzeba je bezwzględnie usuwać, nie tylko dezaktywować.

  3. Okno reakcji wynosi dziś około 5 godzin - tyle średnio mija od ujawnienia luki do pierwszych zautomatyzowanych ataków. Żaden administrator nie zdąży ręcznie wgrać łatki, dlatego sama polityka aktualizacji już nie wystarcza.

  4. Skuteczne odwirusowanie ma stały rytm: kwarantanna → wymiana rdzenia → czyszczenie wtyczek → sanacja bazy → reset wszystkich poświadczeń (w tym kluczy w wp-config.php). Pominięcie któregokolwiek kroku oznacza powrót infekcji w ciągu kilku godzin.

  5. Prewencja to warstwy, nie pojedyncze narzędzie: WAF na poziomie serwera (Wordfence w trybie Extended, nie Basic), 2FA dla każdego administratora, ograniczone uprawnienia użytkownika bazy, kopie zapasowe poza hostingiem.

  6. Mediana kosztów udanego włamania to nawet 50 tys zł - wliczając przestój, utratę sprzedaży i karę algorytmiczną od Google. Stała opieka techniczna kosztuje ułamek tej kwoty miesięcznie.

  7. Większość włamań byłaby do uniknięcia, gdyby ktoś zareagował na pierwszy alert - sygnały pojawiają się zwykle dni lub tygodnie przed faktycznym przejęciem witryny. Kluczowe nie jest narzędzie, tylko fakt, że ktoś codziennie patrzy na stan strony.

Po czym poznasz, że Twój WordPress został zainfekowany?

Z naszego doświadczenia rzadko zdarza się, żeby właściciel strony pierwszy zauważył problem. Zwykle dzwoni klient, partner biznesowy albo dostawca hostingu, który właśnie wyłączył witrynę za rozsyłanie spamu. Czasem pierwszym sygnałem jest gwałtowny spadek ruchu w Search Console.

Najczęstsze objawy infekcji, które widzimy u nowych klientów, to:

  • biały ekran zamiast strony (tzw. White Screen of Death),

  • przekierowania na podejrzane domeny - zwłaszcza z urządzeń mobilnych, podczas gdy z komputera strona wygląda poprawnie,

  • nowi „administratorzy” w panelu WordPressa, których nikt nie dodawał,

  • setki postów w obcych językach, indeksowane przez Google,

  • ostrzeżenie „Strona, którą próbujesz odwiedzić, może zawierać złośliwe oprogramowanie”,

  • gwałtowny wzrost zużycia zasobów serwera bez powodu.

Szczególnie podstępne są infekcje, które filtrują ruch. Strona pokazuje czystą wersję robotom Google i Tobie, a złośliwy kod uruchamia się tylko dla użytkowników mobilnych. Dlatego sam fakt, że „u mnie wszystko wygląda dobrze”, niczego nie przesądza.

Pierwsza godzina po wykryciu - czego nie wolno robić

Najgorsze, co można zrobić w panice, to zalogować się przez FTP, otworzyć kilka losowych plików i zacząć kasować podejrzane fragmenty kodu. Często widzimy, że taka „samodzielna naprawa” doprowadza do nieodwracalnego uszkodzenia bazy danych albo zostawia w systemie głęboko ukryte tylne furtki, których właściciel nawet nie zauważył.

Druga klasyczna pułapka to natychmiastowe nadpisanie zainfekowanej strony backupem sprzed tygodnia. Problem w tym, że atakujący prawdopodobnie był w systemie znacznie dłużej, więc backup też jest skażony. Po przywróceniu kopii infekcja wraca w ciągu kilku godzin.

Co zrobić zamiast tego:

  • odetnij ruch publiczny przez konfigurację serwera (nie przez wtyczkę - atakujący ma do niej dostęp),

  • wykonaj pełną kopię zainfekowanego stanu (pliki + baza), zanim cokolwiek ruszysz,

  • zmień hasła do hostingu, FTP/SSH i bazy danych z innego, czystego urządzenia,

  • nie loguj się do WordPressa z komputera, który mógł być źródłem wycieku poświadczeń.

Ten zestaw działań zajmuje kilkanaście minut i daje punkt wyjścia do bezpiecznej naprawy.

Odwirusowanie strony WordPress krok po kroku

Skuteczne odwirusowanie ma stały rytm. Próba pójścia na skróty zawsze kończy się powrotem infekcji.

Wymiana plików rdzenia

Wszystkie pliki rdzenia WordPressa (folder wp-admin, wp-includes i pliki w katalogu głównym) wymieniamy na świeże, pobrane z oficjalnego źródła. Nie szukamy „brzydkiego kodu” - po prostu kasujemy i wgrywamy wersję czystą. To eliminuje zdecydowaną większość typowych backdoorów.

Plik wp-config.php zostawiamy w spokoju, ale przeglądamy go linijka po linijce. Jeśli na samej górze widzimy długi ciąg eval(base64_decode(...)) albo podobne konstrukcje - to złośliwy kod, który trzeba usunąć.

Czyszczenie wtyczek i motywów

Według raportów branżowych z 2025 i 2026 roku ponad 90% udanych włamań na WordPress wchodzi przez wtyczki i motywy, a nie przez sam rdzeń systemu. Dlatego cały folder wp-content/plugins i wp-content/themes traktujemy jako podejrzany.

Z naszego doświadczenia jedyna sensowna procedura to:

  • spisać listę wtyczek i ich wersji,

  • skasować całą zawartość katalogu plugins,

  • zainstalować od nowa tylko te wtyczki, które są aktywnie wspierane przez autora,

  • bezwzględnie usunąć wtyczki porzucone przez deweloperów (tzw. plugin graveyard),

  • motyw, który nie jest własnym dziełem agencji, pobrać ponownie z oryginalnego źródła.

W folderze wp-content/uploads szukamy plików z rozszerzeniem .php - tam ich być po prostu nie powinno. Każdy taki plik to backdoor.

Sanacja bazy danych

Po plikach przechodzimy do bazy. Sprawdzamy tabelę wp_users pod kątem nieznanych kont z uprawnieniami administratora i tabelę wp_options - tam atakujący często podmieniają wartości siteurl i home, żeby przekierować ruch.

Drugi obowiązkowy krok to przeszukanie postów i metadanych pod kątem wstrzykniętego JavaScriptu. Pomijając ten etap, infekcja wraca w momencie, gdy administrator po raz kolejny się zaloguje - bo złośliwy skrypt po prostu doda nowego użytkownika z poziomu zaufanej sesji.

Reset całego środowiska

Na końcu regenerujemy klucze szyfrujące w wp-config.php (sekcja AUTH_KEY i pokrewne), wymuszamy reset haseł wszystkich użytkowników i zmieniamy dane dostępowe do bazy. To wyrzuca z systemu każdą aktywną sesję atakującego, nawet jeśli jakiś backdoor pominęliśmy.

Dlaczego sama aktualizacja wtyczek już nie wystarcza?

Przez lata standardową radą było „regularnie aktualizuj WordPressa i wtyczki”. W 2026 roku ta rada przestała być wystarczająca. Z danych branżowych wynika, że średni czas od ujawnienia luki do pierwszych zmasowanych prób jej wykorzystania wynosi około pięciu godzin. To okno, w którym żaden człowiek fizycznie nie zdąży wgrać łatki.

Co gorsza, blisko połowa publikowanych podatności w ogóle nie ma w momencie ujawnienia gotowej aktualizacji. Sam autor wtyczki dopiero zaczyna pracę nad poprawką, a botnety już skanują internet w jej poszukiwaniu.

W praktyce oznacza to, że obrona oparta wyłącznie na aktualizacjach jest spóźniona z definicji. Trzeba ją uzupełnić warstwą, która chroni stronę także wtedy, gdy łatki jeszcze nie ma - czyli zaporą aplikacyjną (WAF) na poziomie serwera, a nie tylko wtyczką w panelu WordPressa.

Jak realnie zapobiegać atakom w 2026 roku?

Skuteczna prewencja to kilka warstw, które działają niezależnie od siebie. Jedna zawodzi - druga łapie atak. Z naszego doświadczenia minimum, które naprawdę robi różnicę, to:

  • WAF na poziomie serwera lub CDN - dobrze skonfigurowany Wordfence (w trybie Extended Protection, nie Basic) lub Cloudflare WAF łapią większość ataków, zanim w ogóle dotrą do PHP,

  • dwuskładnikowe logowanie dla każdego konta z uprawnieniami administratora i edytora - to pojedyncza zmiana, która eliminuje 80% udanych włamań przez słabe hasła,

  • ograniczenie uprawnień użytkownika bazy danych do tych, które WordPress faktycznie wykorzystuje - uniemożliwia atakującemu skasowanie tabel,

  • wyłączenie edycji plików

    z panelu define('DISALLOW_FILE_EDIT', true) w wp-config.php

  • kopie zapasowe poza hostingiem - minimum 30 dni rotacji, w niezależnej lokalizacji,

  • regularny przegląd wtyczek i bezlitosne kasowanie tych, które nie były aktualizowane od ponad roku.

Każdy z tych punktów z osobna jest tani. Razem zmieniają stronę z łatwego celu w taki, który botnety pomijają, bo szukają prostszych ofiar.

Stała opieka kontra gaszenie pożarów

Mediana kosztu likwidacji skutków udanego włamania na WordPressa to - według danych z 2026 roku - około 5-10 tys zł. Do tego dochodzą przestój sklepu, utracona sprzedaż, kary algorytmiczne od Google i utrata zaufania klientów. Spadek pozycji w wyszukiwarce odbudowuje się tygodniami.

Z drugiej strony stała opieka techniczna nad witryną - z monitoringiem, testowanym backupem, kontrolą aktualizacji w środowisku staging i szybkim reagowaniem - kosztuje ułamek tej kwoty miesięcznie. To zwykła matematyka zarządzania ryzykiem.

W Kodiwo prowadzimy strony klientów w takim właśnie modelu: aktualizacje testujemy najpierw w środowisku deweloperskim, scenariusze E2E w Playwright sprawdzają, czy po łatce nadal działa kluczowa ścieżka zakupowa, a alerty z WAF trafiają wprost do nas, a nie do skrzynki klienta, gdzie nikt by ich nie przeczytał.

Najważniejsze nie jest jednak narzędzie, tylko fakt, że ktoś codziennie patrzy na stan strony. Większość włamań, które rozplątujemy, byłaby do uniknięcia, gdyby ktoś zareagował na pierwszy alert - zwykle przychodzi on dni albo tygodnie przed faktycznym przejęciem witryny.

Podsumowanie

  • Pierwsza godzina po wykryciu infekcji decyduje o skali strat - nie próbuj naprawiać na własną rękę przez FTP.

  • Odwirusowanie ma stały rytm: kwarantanna, wymiana rdzenia, czyszczenie wtyczek i bazy, reset wszystkich poświadczeń.

  • Same aktualizacje to za mało - okno między ujawnieniem luki a pierwszym atakiem to dziś około pięciu godzin.

  • Skuteczna obrona to kilka warstw: WAF, 2FA, ograniczone uprawnienia, kopie poza hostingiem.

  • Stała opieka techniczna jest wielokrotnie tańsza niż ratowanie strony po włamaniu.

Jeśli czytasz ten artykuł, bo właśnie coś dziwnego dzieje się z Twoją stroną - nie czekaj, aż „samo przejdzie”. Każda godzina zwiększa zasięg infekcji i koszt naprawy. A jeśli czytasz go profilaktycznie i nie masz pewności, czy Twój WordPress jest realnie chroniony, chętnie spojrzymy na to świeżym okiem podczas krótkiej, niezobowiązującej rozmowy. Czasem wystarczy 30 minut, żeby zobaczyć, gdzie strona jest dzisiaj naprawdę odsłonięta.

Najczęściej zadawane pytania

Najczęstsze objawy to przekierowania na obce domeny (zwłaszcza z urządzeń mobilnych), nieznane konta administratorów w panelu, ostrzeżenia Google o złośliwym oprogramowaniu, biały ekran zamiast strony, gwałtowny wzrost zużycia zasobów serwera i pojawienie się obcojęzycznych postów indeksowanych w wyszukiwarce.

Technicznie tak, ale w praktyce odradzamy. Atakujący zostawiają wiele warstw backdoorów, a próby naprawy przez FTP najczęściej kończą się uszkodzeniem bazy danych albo powrotem infekcji w ciągu kilku godzin. Bez pełnej procedury kwarantanny, wymiany rdzenia, sanacji bazy i resetu poświadczeń problem wraca.

Zwykle nie. Atakujący są w systemie dłużej niż się wydaje, więc backupy z ostatnich tygodni też mogą być zainfekowane. Backup jest punktem wyjścia, ale po jego wgraniu i tak trzeba przeprowadzić pełną sanację plików i bazy oraz wymienić wszystkie poświadczenia.

Zależy od skali infekcji i wielkości witryny. Prosty sklep WooCommerce można uratować w ciągu 24 godzin, większe instalacje wymagają więcej czasu. W skali makro mediana kosztów likwidacji udanego włamania to około 50 tys zł, wliczając przestój i utratę pozycji w Google - stąd opłaca się raczej zapobiegać niż gasić pożar.

Tylko po przełączeniu w tryb Extended Protection. Domyślne ustawienie (Basic Protection) ładuje się dopiero razem z WordPressem, więc atakujący ominą firewall, jeśli uderzą bezpośrednio w plik wtyczki. Po prawidłowej konfiguracji Wordfence chroni już na poziomie PHP, jeszcze przed startem CMS.

To czas, jaki obecnie upływa między publicznym ujawnieniem nowej luki w popularnej wtyczce a pierwszymi zmasowanymi próbami jej wykorzystania przez botnety. Tak krótkie okno oznacza, że żaden administrator nie zdąży ręcznie wgrać łatki - potrzebna jest dodatkowa warstwa ochrony, która działa też wtedy, gdy poprawki jeszcze nie ma.

WordPress odpowiada za ponad 43% wszystkich stron w internecie, więc dla cyberprzestępców to najbardziej opłacalny cel. Botnety skanują w trybie ciągłym setki tysięcy adresów dziennie w poszukiwaniu znanych luk we wtyczkach. To nie są ataki celowane - to masowe, automatyczne uderzenia w każdą stronę, która pasuje do schematu.

Z naszego doświadczenia - zwłaszcza tak. Mała firma najmocniej odczuwa kilkudniowy przestój sklepu i utratę pozycji w Google. Stała opieka techniczna kosztuje ułamek tego, co naprawa po włamaniu, a większość incydentów, które rozplątujemy u nowych klientów, dałoby się uniknąć przy jednej godzinie miesięcznie poświęconej na monitoring i kontrolowane aktualizacje.

Damian Tokarczyk

O autorze

Damian Tokarczyk

Nadzór techniczny w projektach IT

Od ponad 15 lat łączę pracę nad produktami cyfrowymi z prowadzeniem ludzi i procesów.

Prowadzę Kodiwo - firmę doradczo-technologiczną, która łączy nadzór nad projektami IT z opieką i utrzymaniem stron www, sklepów oraz aplikacji. Pomagam w audytach, doborze technologii, ocenie ryzyka i wsparciu na każdym etapie - od planu po wdrożenie i codzienną opiekę.

Wierzę w jasne procesy, jakość kodu i zespoły, które uczą się na prawdziwych projektach.

Porozmawiajmy o Twoim projekcie

Umów się na bezpłatną 30-minutową konsultację. Omówimy Twoje wyzwania i zaproponuję konkretne rozwiązania.

Spodobał Ci się ten artykuł?

Zapisz się do newslettera i otrzymuj dwa razy w miesiącu skondensowaną porcję praktycznej wiedzy o projektach IT w formie przyjaznego newsletteru - bez spamu i zbędnych informacji.

Zainfekowany WordPress? Odwirusowanie strony i prewencja