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.
wp-config.php..htaccess, pliki PHP, baza danych, ustawienia adresu witryny.wp-content/uploads, wtyczki do ponownej instalacji lub usunięcia.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:
Referer żądania.User-Agent.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.
Proszę postawić się w sytuacji odwiedzającego, którego ono dotyka:
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:
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.
wp-config.php, stała DB_PASSWORD), a następnie każde konto administratora WordPressa.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.wp config shuffle-salts
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:
# 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.
WP-CLI porównuje pliki rdzenia WordPressa i wtyczek z sumami kontrolnymi publikowanymi przez WordPress.org i wypisuje każdy zmieniony lub dodany plik:
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ę:
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ą.
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:
wp db search "<script"
wp db search "fromCharCode"
Bez WP-CLI te same wyszukiwania można uruchomić w phpMyAdmin, w zakładce SQL:
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.
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.
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.
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:
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.wp-content/uploads, reguły dodane do .htaccess i skrypty znalezione w bazie.wp cron event list: zadanie o nieznanej nazwie może ponownie dodać kod.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.
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ę.
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.
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.
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.
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.
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ę.
Simafri
Porozmawiajmy o Państwa projekcie
Proszę powiedzieć nam w kilku słowach, czego Państwo potrzebują: odpowiemy szybko.
Dziękujemy! Państwa zapytanie zostało wysłane. Wkrótce się odezwiemy.
Wolą Państwo e-mail? Proszę napisać do nas na support@simafri.com.