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ź
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
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?
Czy po włamaniu trzeba usuwać całą stronę i stawiać od zera?
Ile kosztuje profesjonalne wyczyszczenie zhackowanego WordPress?
Czy Wordfence wystarczy, żeby wyczyścić zainfekowaną stronę?
Czy Google usunie ostrzeżenie po wyczyszczeniu strony?
Jak długo trwa powrót ruchu SEO po wyczyszczeniu malware?
Potrzebujesz pomocy?
Potrzebujesz szybkiej pomocy?
Naprawimy problem za Ciebie. Bezpłatna diagnoza i wycena naprawy w ciągu 24h.

