Strona WordPress przekierowuje na inną stronę: jak znaleźć przekierowanie

Państwa odwiedzający trafiają na stronę loterii, apteki albo fałszywej pomocy technicznej, a Państwo widzą swoją stronę normalnie. To znak wstrzykniętego przekierowania, najczęściej warunkowego. Ten poradnik pokazuje, jak je odtworzyć, znaleźć w plikach lub w bazie danych i zamknąć dostęp, przez który zostało dodane.

Opublikowano 21 września 2026 Czas czytania: 10 minut

Wszystkie poradniki

W skrócie

  1. Proszę odtworzyć przekierowanie tak, jak widzi je odwiedzający: okno prywatne, telefon na danych komórkowych, wejście z wyników wyszukiwania.
  2. Przed jakąkolwiek zmianą proszę wykonać pełną kopię strony w obecnym stanie: pliki i bazę danych.
  3. Proszę zmienić hasła do hostingu, FTP, bazy danych i kont administratorów WordPressa, a potem wymienić klucze bezpieczeństwa w wp-config.php.
  4. Przekierowania warto szukać w czterech miejscach: .htaccess, pliki PHP, baza danych, ustawienia adresu witryny.
  5. Proszę usunąć także dostęp, przez który je dodano: nieznane konta administratorów, pliki PHP w wp-content/uploads, wtyczki do ponownej instalacji lub usunięcia.
  6. Proszę sprawdzić raport „Problemy dotyczące bezpieczeństwa” w Google Search Console i poprosić o sprawdzenie, jeśli strona się w nim pojawia.

Dlaczego Państwo nie widzą przekierowania

Przekierowanie dodane podczas włamania wybiera, kogo dotyczy. Najczęściej omija osobę, która zarządza stroną, aby pozostać na miejscu jak najdłużej. Najczęstsze warunki:

Wiadomość od klienta, że „strona odsyła go gdzie indziej”, warto więc potraktować poważnie, nawet jeśli u Państwa wszystko wyświetla się poprawnie.

Odtworzyć przekierowanie

Proszę postawić się w sytuacji odwiedzającego, którego ono dotyka:

  1. Proszę otworzyć okno przeglądania prywatnego, wyszukać nazwę swojej firmy w wyszukiwarce i kliknąć swój wynik.
  2. Proszę powtórzyć to z telefonu, na danych komórkowych zamiast Wi-Fi.
  3. Proszę zapisać adres docelowy, godzinę i urządzenie: te trzy informacje przydadzą się firmie hostingowej, a później w prośbie o sprawdzenie wysłanej do Google.

Jeśli mają Państwo dostęp do terminala, to polecenie pobiera stronę główną, przedstawiając się jako iPhone, który przyszedł z Google:

Terminal (w systemie Windows proszę wpisać curl.exe zamiast curl)
curl -s -i -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)" -e "https://www.google.com/" https://www.panstwa-strona.com/

Proszę przeczytać pierwsze wiersze odpowiedzi. Kod 301 lub 302, po którym następuje wiersz Location: z nieznanym adresem, oznacza przekierowanie wykonywane przez serwer: znajduje się ono w .htaccess lub w pliku PHP. Kod 200, podczas gdy przeglądarka zostaje przekierowana, oznacza przekierowanie wykonywane w samej stronie, w JavaScripcie: najczęściej znajduje się ono w bazie danych lub w pliku motywu.

Zanim zmienią Państwo cokolwiek na stronie: trzy kroki

  1. Pełna kopia w obecnym stanie. Pliki i baza danych, opatrzone datą, przechowywane poza serwerem. Służy jako dowód, punkt odniesienia i zabezpieczenie, gdyby czyszczenie usunęło coś potrzebnego.
  2. Hasła, z czystego urządzenia. Panel klienta firmy hostingowej, konta FTP lub SFTP, użytkownik bazy danych (nowe hasło trzeba wpisać w wp-config.php, stała DB_PASSWORD), a następnie każde konto administratora WordPressa.
  3. Klucze bezpieczeństwa. Osiem wierszy od AUTH_KEY do NONCE_SALT w wp-config.php proszę zastąpić nowym zestawem, wygenerowanym pod adresem https://api.wordpress.org/secret-key/1.1/salt/. Wszystkie otwarte sesje zostaną zamknięte, w tym sesja intruza.
Z WP-CLI trzeci krok to jedno polecenie
wp config shuffle-salts

Gdzie ukrywa się przekierowanie

1. Plik .htaccess

W katalogu głównym strony, a czasem w podkatalogu, plik .htaccess może zawierać reguły przepisywania dodane przez intruza. Blok, który WordPress zapisuje sam, jest krótki i otoczony znacznikami # BEGIN WordPress i # END WordPress:

Blok, który WordPress w języku polskim zapisuje dla strony zainstalowanej w katalogu głównym domeny
# BEGIN WordPress
# Dyrektywy zawarte między „BEGIN WordPress” oraz „END WordPress” są generowane dynamicznie i powinny być modyfikowane tylko za pomocą
# filtrów WordPressa. Zmiany dokonane bezpośrednio tutaj będą nadpisywane.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Reguła RewriteCond, która sprawdza %{HTTP_REFERER} (google, bing, facebook) lub %{HTTP_USER_AGENT} (android, iphone, mobile), a po niej RewriteRule kierująca na zewnętrzny adres, to właśnie przekierowanie. Wtyczki pamięci podręcznej i bezpieczeństwa zapisują też własne bloki, oznaczone swoją nazwą: przed usunięciem bloku proszę porównać go z listą swoich wtyczek.

2. Pliki PHP

WP-CLI porównuje pliki rdzenia WordPressa i wtyczek z sumami kontrolnymi publikowanymi przez WordPress.org i wypisuje każdy zmieniony lub dodany plik:

Terminal, w katalogu głównym strony
wp core verify-checksums
wp plugin verify-checksums --all

Drugie polecenie obejmuje wtyczki rozpowszechniane przez katalog WordPress.org. Wtyczkę kupioną u wydawcy porównuje się ze świeżą kopią pobraną z Państwa konta u niego. To częsty przypadek: spośród 540 stron MŚP na WordPressie w naszym pomiarze z 1 września 2026 66 % ma co najmniej jedną wtyczkę spoza publicznego repozytorium.

Bez WP-CLI dwa wyszukiwania dają pierwszą selekcję:

Terminal, w katalogu głównym strony
find . -name "*.php" -mtime -30
find wp-content/uploads -name "*.php"

Pierwsze wypisuje pliki PHP zmienione w ciągu ostatnich 30 dni, drugie pliki PHP umieszczone w katalogu mediów, gdzie domyślnie są podejrzane (niektóre wtyczki umieszczają tam pusty index.php, który jest prawidłowy). Datę modyfikacji da się sfałszować: stary plik w niewłaściwym miejscu też wymaga sprawdzenia.

W pierwszej kolejności proszę otworzyć wp-config.php, index.php w katalogu głównym, functions.php i header.php aktywnego motywu oraz katalog wp-content/mu-plugins: znajdujące się tam wtyczki ładują się automatycznie i nie da się ich wyłączyć z panelu administracyjnego. Sygnały, których warto szukać: eval(, base64_decode(, gzinflate(, str_rot13(, długie nieczytelne ciągi znaków albo window.location z adresem, którego Państwo nie znają.

3. Baza danych

Przekierowanie w JavaScripcie chętnie trafia do treści stron lub do ustawień, gdzie żaden plik go nie pokazuje. WP-CLI szuka ciągu znaków we wszystkich tabelach WordPressa:

Terminal
wp db search "<script"
wp db search "fromCharCode"

Bez WP-CLI te same wyszukiwania można uruchomić w phpMyAdmin, w zakładce SQL:

SQL (proszę zastąpić wp_ prefiksem ustawionym w wp-config.php, zmienna $table_prefix)
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%<script%';
SELECT option_name FROM wp_options WHERE option_value LIKE '%<script%';

Część wyników jest prawidłowa: narzędzie do statystyk odwiedzin, baner plików cookie albo widżet dodany przez Państwa. Sprawdzenia wymaga to, co nie odpowiada niczemu, co Państwo zainstalowali, zwłaszcza skrypt, który składa adres z kodów znaków.

4. Ustawienia adresu i konta

W Ustawienia > Ogólne pola „Adres WordPressa (URL)” i „Adres witryny (URL)” muszą zawierać Państwa domenę. Te same wartości mogą być narzucone w wp-config.php przez stałe WP_HOME i WP_SITEURL: proszę sprawdzić oba miejsca.

Terminal
wp option get home
wp option get siteurl
wp user list --role=administrator

Gdy stałe są zdefiniowane, dwa pierwsze polecenia zwracają ich wartość. Ostatnie wypisuje administratorów z datą rejestracji; w panelu administracyjnym tę samą listę daje menu Użytkownicy, przefiltrowane według roli Administrator. Konto, którego nikt nie rozpoznaje, należy usunąć, przypisując jego treści do zaufanego konta.

Usunąć przekierowanie, a potem dostęp, przez który je dodano

Usunięcie wiersza, który przekierowuje, zatrzymuje objaw. Dostęp użyty przez intruza pozostaje jednak otwarty, dopóki nie zostanie znaleziony, i przekierowanie wraca w kolejnych dniach. Kolejność, która działa:

  1. Proszę zastąpić pliki rdzenia nową kopią: usunąć katalogi wp-admin i wp-includes, a potem uruchomić wp core download --skip-content --force, które zapisuje rdzeń od nowa, nie ruszając wtyczek, motywów i mediów. Polecenie nadpisuje istniejące pliki, ale nie usuwa żadnego dodanego pliku: dlatego oba katalogi usuwa się najpierw, a nieznane pliki PHP z katalogu głównego usuwa się ręcznie.
  2. Proszę ponownie zainstalować motyw i każdą wtyczkę z ich oficjalnego źródła oraz usunąć te, których strona już nie używa, również wyłączone: ich pliki zostają na serwerze.
  3. Proszę usunąć obce pliki PHP z wp-content/uploads, reguły dodane do .htaccess i skrypty znalezione w bazie.
  4. Proszę sprawdzić zaplanowane zadania poleceniem wp cron event list: zadanie o nieznanej nazwie może ponownie dodać kod.
  5. Proszę zaktualizować WordPressa, motyw i wtyczki.
  6. Proszę powtórzyć testy z początku, z kilku urządzeń i przez kilka dni.

Jeśli strona przechowuje dane osobowe (formularze, konta klientów, zamówienia), proszę zapisać godzinę, o której stwierdzili Państwo włamanie. W Unii Europejskiej RODO (ogólne rozporządzenie o ochronie danych) przewiduje zgłoszenie naruszenia ochrony danych osobowych organowi nadzorczemu w terminie 72 godzin po jego stwierdzeniu, chyba że jest mało prawdopodobne, by naruszenie skutkowało ryzykiem naruszenia praw lub wolności osób fizycznych.

Google i to, co widzą Państwa odwiedzający

Gdy Google wykryje przekierowanie, Chrome może wyświetlić czerwoną stronę „Niebezpieczna strona”, zanim otworzy witrynę, a Google może dopisać pod Państwa wynikiem „Ta witryna mogła paść ofiarą ataku hakerów”. Raport Problemy dotyczące bezpieczeństwa w Google Search Console pokazuje, co wykryto i pod jakimi adresami. Gdy strona jest już wyczyszczona, przycisk Poproś o sprawdzenie uruchamia weryfikację.

Strona przejęta i utrzymywana po usunięciu przekierowania

Po usunięciu przekierowania zostaje pytanie: kto zajmie się stroną dalej? Simafri przejmuje Państwa stronę WordPress, przywraca ją online na podstawie, którą hostujemy, zabezpieczamy i aktualizujemy, a potem zajmuje się nią miesiąc po miesiącu. Domena i treści pozostają Państwa.

Chcę przekazać swoją stronę

Częste pytania

Dlaczego moja strona przekierowuje tylko na telefonie?

Wstrzyknięty kod odczytuje identyfikator User-Agent przeglądarki i przekierowuje tylko telefony. Osoba zarządzająca stroną, często na komputerze, niczego nie zauważa. Proszę przetestować stronę z telefonu na danych komórkowych albo poleceniem curl z identyfikatorem przeglądarki mobilnej.

Czy ponowna instalacja WordPressa usuwa przekierowanie?

Ponowna instalacja rdzenia zapisuje od nowa pliki WordPressa, ale nie usuwa plików, które mógł dodać intruz. Baza danych, motyw, wtyczki i katalog mediów pozostają bez zmian, a to tam najczęściej znajdują się przekierowanie i dostęp intruza. Nowy rdzeń to jeden z etapów czyszczenia, który uzupełniają baza danych, wtyczki, konta i hasła.

Strona została wyczyszczona, dlaczego przekierowanie wraca?

Ponieważ dostęp, przez który je dodano, wciąż istnieje: dodane konto administratora, plik PHP ukryty w mediach, zaplanowane zadanie, podatna wtyczka. Każdy z nich pozwala ponownie dodać kod po czyszczeniu. Proszę sprawdzić konta, katalog wp-content/uploads, zaplanowane zadania i wersje wtyczek, a potem jeszcze raz zmienić hasła.

Jak sprawdzić, czy Google wykrył przekierowanie?

Proszę otworzyć Google Search Console, a w nim raport Problemy dotyczące bezpieczeństwa: zawiera wykryte problemy i przykładowe adresy URL. Jeśli strona nie jest jeszcze zweryfikowana w Search Console, weryfikacja rekordem DNS obejmuje całą domenę.

Skontaktuj się z nami