Bezpieczeństwo
Strona przekierowuje na obcy adres — tak wygląda włamanie
Wpisujesz swój adres, a przeglądarka ląduje gdzieś indziej. To jeden z najczęstszych objawów przejęcia strony. Sprawdź, jak duży masz problem.
Wpisujesz adres swojej strony, a po sekundzie widzisz kasyno, sklep z podróbkami albo stronę „wygrałeś iPhone’a”. Czasem dzieje się to tylko na telefonie. Czasem tylko wtedy, gdy wejdziesz z wyników Google, a po wpisaniu adresu ręcznie wszystko wygląda normalnie.
To ostatnie jest szczególnie podłe, bo pozwala infekcji żyć tygodniami. Ty widzisz swoją stronę, klienci widzą kasyno.
Jeśli masz taki objaw, załóż, że strona została przejęta. Nie „prawdopodobnie” — złośliwe przekierowanie nie powstaje samo z siebie.
Najpierw sprawdź, jak głęboko to siedzi
Zanim cokolwiek usuniesz, ustal skalę. Trzy minuty, a oszczędza godziny.
Wejdź z telefonu i z komputera, w trybie prywatnym. Sprawdź też wejście z wyników Google. Zapisz, w których wariantach przekierowanie występuje — to podpowie, gdzie schowany jest kod.
Zobacz stronę oczami Google. W Search Console użyj narzędzia sprawdzania adresu URL. Jeśli Google widzi treść, której nie ma na Twojej stronie — linki do leków, kasyn, chińskie znaki — infekcja siedzi w bazie albo w plikach motywu.
Sprawdź listę użytkowników. Panel, sekcja Użytkownicy. Konto administratora, którego nie rozpoznajesz, z niedawną datą rejestracji, to praktycznie pewnik.
Sprawdź datę modyfikacji plików. Przez FTP posortuj pliki w katalogu głównym i w wp-content po dacie zmiany. Pliki zmienione tego samego dnia co awaria, choć nic nie aktualizowałeś, wskazują miejsce wejścia.
Gdzie najczęściej siedzi złośliwy kod
Warto wiedzieć, bo to nie jest jeden plik do skasowania.
.htaccess — reguła przekierowująca ruch przychodzący z wyszukiwarek. Tu tłumaczy się objaw „tylko z Google”.
index.php w katalogu głównym i w motywie — dopisana jedna długa linia, zwykle zakodowana funkcją base64_decode albo eval, żeby nie dało się jej przeczytać.
functions.php motywu — ulubione miejsce, bo wykonuje się przy każdym żądaniu.
Tabela wp_options w bazie — wpisy siteurl i home podmienione na obcy adres, albo wstrzyknięty skrypt w opcjach wtyczek.
Fałszywa wtyczka — katalog w wp-content/plugins o wiarygodnie brzmiącej nazwie, którego nigdy nie instalowałeś i którego nie ma w repozytorium WordPressa.
Zadania cron — mechanizm, który przywraca infekcję po tym, jak ją usuniesz. Dlatego czyszczenie „na szybko” tak często nie działa.
Co zrobić w pierwszej godzinie
Kolejność ma znaczenie.
1. Zrób kopię, choć strona jest zainfekowana. Brzmi kontrowersyjnie, ale to Twoje zabezpieczenie na wypadek, gdyby przy czyszczeniu coś poszło nie tak. Opisz ją wyraźnie jako zainfekowaną.
2. Zmień wszystkie hasła. Panel WordPressa, FTP, baza danych, panel hostingu, konta pocztowe. Wszystkie, nie tylko to jedno, które podejrzewasz. Jeśli atakujący ma dostęp do FTP, zmiana hasła w panelu WordPressa niczego nie załatwia.
3. Wyloguj wszystkie sesje. W profilu użytkownika jest przycisk wylogowania z pozostałych urządzeń. Bez tego cudza sesja zostaje aktywna.
4. Sprawdź, czy Google już to zauważył. W Search Console, sekcja Problemy dotyczące bezpieczeństwa. Jeśli tam jest ostrzeżenie, po wyczyszczeniu trzeba zgłosić stronę do ponownego sprawdzenia — inaczej ostrzeżenie w przeglądarce zostanie.
5. Nie usuwaj śladów, dopóki nie ustalisz, jak weszli. To najczęstszy błąd. Skasowanie zainfekowanych plików bez zamknięcia luki oznacza, że za tydzień wszystko wraca.
Jak zwykle wchodzą
Prawie nigdy przez „dziurę w WordPressie”. Rdzeń jest pilnowany przez tysiące osób i łatany szybko.
Realne drogi to:
- nieaktualna wtyczka — najczęstsza przyczyna, bez konkurencji,
- porzucony motyw, którego autor przestał rozwijać dwa lata temu,
- motyw lub wtyczka premium z nielegalnego źródła — darmowa wersja płatnej wtyczki bardzo często ma dopisany backdoor. To nie teoria, to standard,
- słabe hasło administratora i brak limitu prób logowania,
- stara wersja PHP, do której nie ma już poprawek bezpieczeństwa,
- inne konto na tym samym serwerze — przy tanim hostingu współdzielonym infekcja potrafi przejść w poprzek.
Dlaczego czyszczenie na własną rękę zwykle nie kończy sprawy
Bo włamanie to rzadko jeden plik. Typowy zestaw to: przekierowanie w .htaccess, backdoor w losowo nazwanym pliku PHP, dopisek w functions.php, dodatkowe konto administratora i zadanie cron, które odtwarza wszystko po usunięciu. Dlaczego czyszczenie bez zamknięcia luki się cofa, opisaliśmy osobno.
Wtyczki skanujące wyłapują część tego. Nie wyłapią pliku, który wygląda jak zwykły plik motywu, ani wpisu w bazie danych. Dlatego porządne czyszczenie polega na porównaniu plików z oryginalnymi paczkami z wordpress.org i z repozytoriów wtyczek — wtedy każda różnica jest widoczna.
I dlatego trzeci krok jest najważniejszy: zamknięcie luki. Bez tego pozostałe dwa są tylko odroczeniem.
Ile to zajmuje
Czyszczenie po włamaniu to u nas zwykle 2–4 godziny, zależnie od skali. Sama diagnoza — ile plików jest ruszonych i czy infekcja siedzi też w bazie — mieści się w bezpłatnym sprawdzeniu.
Warto zlecić to od razu, jeśli:
- strona zarabia i każdy dzień z ostrzeżeniem Google to utracona sprzedaż,
- nie masz czystej kopii zapasowej z okresu przed infekcją,
- to sklep — tam w grę wchodzą dane klientów, a przy wycieku danych osobowych dochodzą obowiązki wynikające z RODO,
- już raz czyściłeś i wróciło. To znaczy, że luka jest nadal otwarta.
Przy okazji: jeśli strona przy tym wszystkim pokazuje błąd 500 albo białą stronę, nie naprawiaj samego objawu. Przywrócenie działania zainfekowanej strony to najgorszy możliwy wynik, bo problem przestaje być widoczny, ale nie znika.
Najlepszą profilaktyką jest nuda: regularne aktualizacje, mniej wtyczek, kopie zapasowe trzymane poza serwerem i monitoring. Dokładnie z tego składa się stała opieka nad stroną — nie z magii, tylko z rzeczy robionych na czas.
Podejrzewasz, że stronę ktoś przejął? Sprawdzimy i wyczyścimy — diagnoza bezpłatna, odpowiedź w ciągu dwóch godzin. Usuwamy infekcję, naprawiamy pliki i zamykamy lukę, którą weszli, a potem pomagamy zdjąć ostrzeżenie w Google. Rozliczenie godzinowe od 120 zł netto, płatność po wykonaniu.