Skip to content

Wszystko o WordPressie, tworzeniu stron — i nie tylko

🔐 Jak wyczyścić i przywrócić zhakowaną stronę WordPress: przewodnik krok po kroku

🔐 Jak wyczyścić i przywrócić zhakowaną stronę WordPress: przewodnik krok po kroku

Obudzili się Państwo rano, a Państwa strona WordPress zamieniła się w filię kasyna online albo po cichu trafiła pod ban Google. Brzmi znajomo? Włamanie niszczy nie tylko pliki na serwerze: ruch spada do zera, pozycje w wynikach wyszukiwania lecą w dół, a biznes staje na dnie, czasem na tygodnie.

Najgorszy jest ten moment, gdy support hostingu rozkłada ręce: „Kopie zapasowe też są zainfekowane, nie możemy pomóc". Typowa historia dla tysięcy właścicieli stron, zwłaszcza tych, którzy siedzą na tanim hostingu współdzielonym.

Dobra wiadomość: nawet całkowicie przejętą stronę naprawdę da się wyczyścić i postawić na nogi w jeden wieczór. Bez armii programistów i drogich kontraktów z firmami security. Potrzebna jest zimna głowa, właściwa kolejność kroków i zrozumienie, gdzie ukrywa się szkodliwy kod.

💡 Szybki przegląd:

  • Proszę ocenić skalę: czy jest dostęp do panelu administracyjnego, co mówi hosting, które pliki zostały naruszone
  • Proszę skontaktować się z dostawcą hostingu i uzyskać listę zainfekowanych plików
  • Proszę usunąć lub zastąpić skompromitowane pliki przez cPanel, FTP lub WP-CLI
  • Proszę przywrócić czystą wersję strony z kopii zapasowej albo przeinstalować rdzeń
  • Proszę zmienić WSZYSTKIE hasła, klucze bezpieczeństwa w wp-config.php i zamknąć punkt wejścia
  • Proszę poprosić o usunięcie z czarnych list Google i hostingu

Krok 1: Proszę ocenić skalę i nie panikować

Powiadomienie o włamaniu na stronę od dostawcy hostingu

Przede wszystkim proszę sprawdzić, czy otwiera się panel administracyjny. Jeśli wp-admin działa i mogą się Państwo zalogować, sytuacja jest do opanowania, często wszystko da się rozwiązać w godzinę. Jeśli dostęp jest zablokowany, trzeba będzie pracować przez panel hostingu lub FTP, ale to też nie jest wyrok.

Po drugie: proszę nie usuwać strony całkowicie pod wpływem emocji. W 90% przypadków zainfekowane są konkretne pliki, a nie cała instalacja WordPressa. Proszę wejść w Search Console od Google, zakładka Security, tam są wymienione adresy URL, które Google oznaczył jako szkodliwe. To da pierwsze wyobrażenie o skali.

Po trzecie: proszę od razu napisać do hostera. Nie „złamano nam stronę, pomóżcie", tylko konkretnie: „Proszę przesłać listę zmodyfikowanych plików ze znacznikami czasu oraz logi podejrzanej aktywności z ostatnich 72 godzin". Hosting ma logi serwerowe, widzi anomalie i może dostarczyć dokładną listę zainfekowanych plików.

Jeśli support gra na zwłokę, proszę eskalować: dzwonić, pisać w mediach społecznościowych firmy, otwierać ponowne zgłoszenie. Większość hosterów poważnie reaguje na publiczne zapytania, szkoda wizerunkowa kosztuje więcej niż godzina pracy inżyniera.

Krok 2: Proszę znaleźć i usunąć zainfekowane pliki

Lista plików PHP zainfekowanych złośliwym kodem

Gdy otrzymają już Państwo od hostingu listę zainfekowanych plików lub wykryją je Państwo przez skaner, proszę działać metodycznie. Kolejność jest ważna: jeśli pominą Państwo jeden backdoor, haker wróci w ciągu doby.

Proszę zrobić pełną kopię strony. Proszę pobrać WSZYSTKIE pliki na lokalny komputer przez FTP lub SFTP. Nawet zainfekowane, przydadzą się do analizy i jako zabezpieczenie na wypadek, gdyby coś poszło nie tak.

Proszę przeinstalować rdzeń WordPressa. Proszę usunąć foldery wp-admin i wp-includes w całości, następnie pobrać świeży ZIP z wordpress.org i rozpakować na wierzch. Proszę zastąpić wszystko oprócz wp-content i wp-config.php. To gwarantuje, że pliki systemowe są czyste.

Proszę sprawdzić wp-content. Wtyczki i motywy to główny cel atakujących. Jeśli wtyczka jest zainfekowana, proszę usunąć jej folder w całości i zainstalować ją ponownie z oficjalnego repozytorium. Jeśli zainfekowany jest motyw, a używają Państwo motywu potomnego, najprawdopodobniej ucierpiał tylko motyw nadrzędny, proszę go przeinstalować.

Proszę szukać sygnatur szkodliwego kodu. Klasyczne markery powłok PHP i backdoorów: eval i base64_decode, najczęstsze. Trafiają się też gzinflate, str_rot13 i assert. Proszę przeszukać grepem wszystkie pliki .php. Proszę sprawdzić pliki ukryte: .htaccess, php.ini i .ico z kodem PHP w środku. Hakerzy uwielbiają maskować backdoory pod niewinnymi ikonami.

Krok 3: Proszę przywrócić stronę z czystej kopii

Jeśli mają Państwo kopię zapasową i jest ona czysta, mają Państwo szczęście: przywracanie zajmie 15-20 minut. Proszę wejść do wtyczki do backupu lub panelu hostingu, wybrać punkt przywracania SPRZED daty włamania i uruchomić proces. Natychmiast po przywróceniu proszę przepuścić stronę przez skaner bezpieczeństwa: backdoor mógł zostać podłożony na długo przed aktywnym atakiem.

Nie ma backupu? Proszę przeinstalować WordPressa przez panel administracyjny: „Aktualizacje" → „Przeinstaluj". To zaktualizuje rdzeń, ale pozostawi wtyczki i motywy nietknięte, trzeba będzie je sprawdzić ręcznie, jak opisano w kroku 2.

Po przywróceniu proszę upewnić się, że strona się otwiera, i natychmiast przejść do kroku 4. Atakujący może spróbować wrócić przez pozostawiony backdoor w ciągu najbliższych godzin.

Krok 4: Proszę zmienić wszystkie dane logowania i klucze

Interfejs generowania kluczy bezpieczeństwa w wp-config.php

Pierwsza i najpilniejsza rzecz: proszę wygenerować nowe klucze bezpieczeństwa WordPress. Proszę wstawić je do pliku wp-config.php w miejsce starych. Spowoduje to natychmiastowe wylogowanie WSZYSTKICH aktywnych sesji, w tym sesji hakera, jeśli nadal znajduje się w panelu administracyjnym.

Następnie proszę zmieniać według listy, niczego nie pomijając:

  • Hasło administratora WordPress oraz wszystkich użytkowników z rolą „administrator"
  • Hasło do konta hostingowego: cPanel, ISPmanager lub panel niestandardowy
  • Hasło do bazy danych MySQL i proszę zaktualizować je w pliku wp-config.php
  • Hasło do FTP lub SFTP
  • Hasło do skrzynki pocztowej powiązanej z panelem administracyjnym witryny
  • Klucze API: Google Search Console, CDN, usługi pocztowe, bramki płatnicze

Proszę sprawdzić tabelę wp_users w bazie danych: czy nie ma w niej nieznajomych użytkowników z uprawnieniami administratora. Jeśli Pan/Pani znajdzie, proszę natychmiast usunąć. To klasyczny ślad ataku: haker tworzy ukryte konto i wraca przez nie po Pana/Pani „wyczyszczeniu".

Krok 5: Proszę poprosić o usunięcie z czarnych list

Po wyczyszczeniu witryna może jeszcze przez kilka dni figurować na czarnych listach Google Safe Browsing. Przeglądarki pokazują wówczas czerwony ekran z ostrzeżeniem, nawet jeśli szkodliwy kod został już usunięty. Proszę wejść do panelu bezpieczeństwa Search Console, zakładka „Security Issues", i kliknąć „Request Review". Zazwyczaj Google usuwa oznaczenie w ciągu 24-72 godzin.

Równolegle proszę skontaktować się z dostawcą hostingu: mógł dodać Pana/Pani adres IP lub domenę do wewnętrznej czarnej listy, przez co witryna nie otwiera się, nawet będąc czystą. Proszę wyjaśnić, że czyszczenie zostało przeprowadzone, i poprosić o zdjęcie blokady.

Po usunięciu wszystkich oznaczeń proszę sprawdzić witrynę w trybie incognito. Powinna otwierać się bez ostrzeżeń bezpieczeństwa. Proszę zapisać zrzut ekranu, przyda się, jeśli blokada powróci.

Krok 6: Proszę zamknąć punkt wejścia i wzmocnić ochronę

Schemat zabezpieczeń WordPress po odzyskaniu po włamaniu

Wyczyszczenie to połowa sukcesu. Jeśli nie zamknie Pan/Pani dziury, przez którą intruz wszedł, drugie włamanie nastąpi dziesiątki razy szybciej niż pierwsze. Zna Pan/Pani teraz dokładnie wektor ataku, proszę wykorzystać tę wiedzę.

Proszę zainstalować firewall. Wordfence oferuje firewall punktu końcowego i skaner sygnatur, darmowa wersja jest wystarczająca dla większości witryn. Solid Security (dawniej iThemes Security) dodaje zestaw reguł hartowania: zmianę prefiksu bazy danych, wyłączenie edytora plików z panelu administracyjnego, uwierzytelnianie dwuskładnikowe. Minimalny zestaw: jeden firewall plus jeden skaner.

Proszę podłączyć chmurowy WAF. Cloudflare z regułami dla WordPressa lub Sucuri filtrują ruch, zanim dotrze on do serwera. Po włamaniu nie jest to luksus, lecz konieczność: chmurowy WAF odcina szkodliwe zapytania na poziomie DNS i zdejmuje obciążenie z Pana/Pani witryny.

Proszę skonfigurować monitorowanie integralności plików. Wordfence i Solid Security potrafią powiadamiać o każdej zmianie plików PHP. Dowiaduje się Pan/Pani o ponownym ataku w tej samej chwili, a nie po tygodniu, gdy Google oznaczy witrynę jako szkodliwą.

Proszę przejrzeć listę wtyczek. Każda zbędna wtyczka to potencjalny punkt wejścia. Proszę usunąć wszystko, czego Pan/Pani nie używa. Te, które pozostaną, proszę zaktualizować do najnowszych wersji i w miarę możliwości włączyć automatyczne aktualizacje.

Jak chronić WordPress przed włamaniem w przyszłości

Porównanie paneli hostingowych dla WordPress

Profilaktyka kosztuje setki razy mniej niż odzyskiwanie danych. Oto, co należy zrobić już teraz, nawet jeśli Pana/Pani strona nie została jeszcze zhakowana.

Proszę przenieść się na hosting zarządzany

Cztery dolary miesięcznie za taryfę współdzieloną to kusząca cena. Ale gdy Pana/Pani strona znajduje się na jednym serwerze z setkami innych, włamanie na jednego z sąsiadów niemal na pewno dociera również do Pana/Pani. Cross-site contamination na hostingu współdzielonym to nie teoria: według danych Sucuri około jedna trzecia zainfekowanych stron WordPress jest hostowana właśnie na platformach współdzielonych.

Zarządzany hosting WordPress, WP Engine, Kinsta, Cloudways, zapewnia izolowane środowisko, automatyczne codzienne kopie zapasowe i całodobowy zespół bezpieczeństwa. Tak, jest to wielokrotnie droższe niż taryfa współdzielona. Ale tydzień przestoju po włamaniu kosztuje więcej niż roczny abonament dobrego hostingu.

Wybierając hosta, proszę sprawdzić trzy rzeczy: czy Pana/Pani środowisko jest odizolowane od sąsiadów, czy są codzienne automatyczne kopie zapasowe i jak szybko support reaguje na incydenty bezpieczeństwa. Odpowiedzi na te pytania to najlepszy predyktor tego, czy przetrwa Pan/Pani kolejne włamanie bez strat.

Proszę utrzymywać rdzeń, motywy i wtyczki w aktualności

Interfejs aktualizacji wtyczek w kokpicie WordPress

Zdecydowana większość udanych włamań na WordPressa odbywa się przez znane luki we wtyczkach i motywach, te same, które deweloperzy już załatali. Atakujący skanują internet w poszukiwaniu stron z niezałatanymi wersjami automatycznie, często w ciągu 48 godzin od publikacji CVE.

Automatyczne aktualizacje rdzenia WordPress są domyślnie włączone od wersji 5.5. Dla wtyczek i motywów z oficjalnego repozytorium WordPress.org proszę włączyć automatyczne aktualizacje selektywnie, to bezpieczne. Wtyczki premium z własnych stron proszę aktualizować ręcznie, ale nie rzadziej niż raz w tygodniu.

I tak, przed każdą dużą aktualizacją proszę wykonać kopię zapasową. Zawsze.

Proszę skonfigurować kopię zapasową

Katalog motywów i wtyczek na WordPress.org

Bez świeżej kopii zapasowej odzyskiwanie po włamaniu zamienia się w ręczne przeglądanie dziesiątek tysięcy plików. Z kopią zapasową to pięć kliknięć i pół godziny oczekiwania.

Jetpack VaultPress Backup wykonuje przyrostowe kopie zapasowe w czasie rzeczywistym z przechowywaniem w chmurze Automattic. BlogVault specjalizuje się w WordPressie i potrafi przywrócić stronę, nawet gdy panel administracyjny nie działa. BackWPup to darmowa opcja z harmonogramem i eksportem do Dropbox, S3 lub Google Drive.

Złoty standard: jedna kopia zapasowa w chmurze plus jedna lokalna, którą pobiera Pan/Pani na swój komputer raz w tygodniu. Kopia w chmurze uratuje w przypadku awarii hostingu, lokalna, jeśli konto w chmurze również zostanie skompromitowane.

Proszę włączyć uwierzytelnianie dwuskładnikowe

Hasło admin123 lub qwerty to otwarte zaproszenie. Ataki brute-force na wp-login.php trwają całą dobę, a proste hasła są łamane w kilka sekund. Proszę generować hasła o długości od 20 znaków za pomocą menedżera haseł, Bitwarden lub 1Password, i nigdy nie używać tego samego hasła na kilku stronach.

Uwierzytelnianie dwuskładnikowe przez Wordfence Login Security lub Two Factor praktycznie całkowicie zamyka wektor ataku brute-force: nawet znając hasło, atakujący nie zaloguje się bez kodu TOTP z Pana/Pani telefonu.

Proszę również zmienić standardowy adres URL logowania z /wp-admin i /wp-login.php na niestandardowy. To nie jest panaceum, ale odcina zdecydowaną większość automatycznych botów, które bezrefleksyjnie atakują standardowe endpointy.

⁉️🤔 Często zadawane pytania

Czy można odzyskać stronę bez kopii zapasowej?

Tak, ale proces jest dłuższy i trudniejszy. Zainstaluj ponownie rdzeń WordPressa przez panel administracyjny, ręcznie sprawdź każdą wtyczkę i motyw pod kątem złośliwego kodu, szukając sygnatur eval, base64_decode i gzinflate w plikach .php. Zmień wszystkie hasła i klucze bezpieczeństwa. Treść zazwyczaj nie jest naruszona: znajduje się w bazie danych, której hakerzy rzadko dotykają. Pełne czyszczenie bez kopii zapasowej zajmuje 2-4 godziny w zależności od rozmiaru strony.

Jak rozpoznać, że strona została zhakowana?

Sygnały: Google Search Console pokazuje ostrzeżenia bezpieczeństwa, przeglądarka blokuje stronę czerwonym ekranem, ruch gwałtownie spadł, w wynikach wyszukiwania pojawiły się obce podstrony, panel administracyjny nie przyjmuje poprawnego hasła, hosting wysłał powiadomienie o podejrzanej aktywności. Szybkie sprawdzenie: uruchom bezpłatny skaner Sucuri SiteCheck, który w minutę pokaże znane infekcje.

Co zrobić, jeśli hosting nie pomaga?

Zmień hosting. Jeśli dostawca w ciągu doby od incydentu nie dostarczył listy zainfekowanych plików i logów serwera, jego zespół bezpieczeństwa albo nie istnieje, albo jest przeciążony. Dla strony biznesowej to nie jest partner. Na czas odzyskiwania kup minimalny plan hostingu zarządzanego, przenieś tam czystą kopię strony i zamknij stare konto.

Czy przycisk „Zainstaluj ponownie" w panelu administracyjnym wystarczy?

Nie. Przycisk „Zainstaluj ponownie" w sekcji „Aktualizacje" zastępuje tylko pliki rdzenia WordPressa. Nie dotyka zainfekowanych wtyczek, motywów, ukrytych backdoorów w wp-content ani złośliwych wpisów w .htaccess. Potrzebny jest pełny cykl: skanowanie, wymiana zainfekowanych plików, reset haseł i kluczy, sprawdzenie bazy danych pod kątem ukrytych administratorów.

Czy warto płacić za profesjonalne czyszczenie?

Jeśli strona zarabia, a przestój kosztuje więcej niż kilkaset dolarów dziennie, tak, zatrudnij specjalistę. Sucuri oferuje jednorazowe czyszczenie strony, są freelancerzy na Codeable i wyspecjalizowane agencje WordPress. Dla małego bloga lub strony docelowej opisany powyżej poradnik jest wystarczający: czyszczenie zajmie wieczór, a zaoszczędzone pieniądze proszę zainwestować w porządny hosting.

Jak długo strona będzie odzyskiwać pozycje w wyszukiwarce?

Po zdjęciu blokady w Google Search Console strona zostanie ponownie zindeksowana w ciągu kilku dni. Pozycje nie wracają natychmiast: algorytmy potrzebują czasu, aby upewnić się, że podstrony są czyste. Zazwyczaj pełne odzyskanie zajmuje 2-4 tygodnie. Kluczowe jest zamknięcie luki, przez którą nastąpił atak, w przeciwnym razie drugie włamanie zniweczy cały postęp.

Strona odzyskana: co zrobić, aby włamanie się nie powtórzyło

Włamanie to sygnał alarmowy, który pokazuje, gdzie Pana/Pani zabezpieczenia zawiodły. Proszę potraktować je jako darmowy audyt bezpieczeństwa: zna Pan/Pani teraz dokładnie wektor ataku i może go Pan/Pani zamknąć na zawsze.

Krótka lista kontrolna na przyszłość:

  • Proszę przenieść stronę na zarządzany hosting z izolowanym środowiskiem
  • Proszę skonfigurować codzienne kopie zapasowe: jedną w chmurze, jedną lokalną
  • Proszę zainstalować firewall i skaner, włączyć automatyczne aktualizacje wtyczek z repozytorium
  • Proszę włączyć uwierzytelnianie dwuskładnikowe dla wszystkich administratorów
  • Proszę usunąć nieużywane wtyczki i motywy

Najbardziej niebezpieczna po włamaniu jest nadzieja na „jakoś to będzie". Drugie włamanie przez tę samą lukę zdarza się wielokrotnie częściej niż pierwsze: backdoor jest już pozostawiony, adres strony jest znany atakującemu. Proszę przejść całą listę kontrolną do końca, zamknąć punkt wejścia i spać spokojnie.