Návštěvníci končí na stránce s loterií, lékárnou nebo falešnou technickou podporou, a vy přitom vidíte svůj web normálně. To je znak vloženého přesměrování, nejčastěji podmíněného. Tento průvodce vysvětluje, jak přesměrování vyvolat, jak ho najít v souborech nebo v databázi a jak zavřít přístup, kterým bylo vloženo.
wp-config.php..htaccess, soubory PHP, databáze, nastavení adresy webu.wp-content/uploads, pluginy k přeinstalaci nebo smazání.Přesměrování vložené při napadení si vybírá, koho se týká. Nejčastěji šetří toho, kdo web spravuje, aby zůstalo na místě co nejdéle. Nejběžnější podmínky:
Referer.User-Agent.Zprávu od zákazníka ve smyslu „váš web mě posílá jinam“ proto berte vážně, i když se vám všechno zobrazuje správně.
Vžijte se do situace návštěvníka, kterého přesměrování zasáhne:
Pokud máte přístup k terminálu, tento příkaz si vyžádá vaši úvodní stránku a představí se přitom jako iPhone, který přichází z Googlu:
curl -s -i -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)" -e "https://www.google.com/" https://www.vas-web.com/
Přečtěte si první řádky odpovědi. Kód 301 nebo 302, za kterým následuje řádek Location: s neznámou adresou, znamená přesměrování provedené serverem: sídlí v .htaccess nebo v souboru PHP. Kód 200, zatímco prohlížeč přesměrován je, znamená přesměrování provedené ve stránce, v JavaScriptu: nejčastěji sídlí v databázi nebo v souboru šablony.
wp-config.php, konstanta DB_PASSWORD) a pak každý administrátorský účet WordPressu.AUTH_KEY po NONCE_SALT ve wp-config.php novou sadou vygenerovanou na https://api.wordpress.org/secret-key/1.1/salt/. Všechny otevřené relace se ukončí, včetně relace útočníka.wp config shuffle-salts
V kořenovém adresáři webu, a někdy i v podadresáři, může .htaccess obsahovat pravidla pro přepis adres, která přidal útočník. Blok, který zapisuje sám WordPress, je krátký a ohraničený řádky # BEGIN WordPress a # END WordPress:
# BEGIN WordPress
# Direktivy (řádky) mezi "BEGIN WordPress" a "END WordPress" jsou
# dynamicky generované a měly by být upravovány pouze pomocí filtrů WordPressu.
# Veškeré změny směrnic mezi těmito značkami budou přepsány.
<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
Pravidlo RewriteCond, které testuje %{HTTP_REFERER} (google, bing, facebook) nebo %{HTTP_USER_AGENT} (android, iphone, mobile), následované pravidlem RewriteRule vedoucím na vnější adresu, je právě to přesměrování. Pluginy pro cache a zabezpečení zapisují i vlastní bloky, označené svým názvem: než blok odstraníte, porovnejte ho se seznamem svých pluginů.
WP-CLI porovná soubory jádra WordPressu a pluginů s kontrolními součty, které zveřejňuje WordPress.org, a vypíše každý změněný nebo přidaný soubor:
wp core verify-checksums
wp plugin verify-checksums --all
Druhý příkaz pokrývá pluginy distribuované adresářem WordPress.org. Plugin koupený u vydavatele se porovnává s čerstvou kopií staženou z vašeho účtu u něj. Je to častý případ: z 540 webů malých a středních firem na WordPressu v našem měření z 1. září 2026 nese 66 % alespoň jeden plugin, který ve veřejném adresáři není.
Bez WP-CLI poskytnou první výběr dvě hledání:
find . -name "*.php" -mtime -30
find wp-content/uploads -name "*.php"
První vypíše soubory PHP změněné za posledních 30 dní, druhé soubory PHP uložené ve složce médií, kde jsou už z podstaty podezřelé (některé pluginy tam vkládají prázdný index.php, který je v pořádku). Datum změny lze zfalšovat: starý soubor na nesprávném místě si prohlédněte také.
Nejdřív otevřete wp-config.php, index.php v kořeni, functions.php a header.php aktivní šablony a složku wp-content/mu-plugins: pluginy v ní se načítají automaticky a v administraci je nelze deaktivovat. Čeho si všímat: eval(, base64_decode(, gzinflate(, str_rot13(, dlouhé nečitelné řetězce nebo window.location následované adresou, kterou neznáte.
Přesměrování v JavaScriptu se rádo ukládá do obsahu stránek nebo do nastavení, kde ho žádný soubor neukáže. WP-CLI vyhledá řetězec ve všech tabulkách WordPressu:
wp db search "<script"
wp db search "fromCharCode"
Bez WP-CLI spustíte stejná hledání v phpMyAdminu, na kartě SQL:
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%<script%';
SELECT option_name FROM wp_options WHERE option_value LIKE '%<script%';
Některé výsledky jsou v pořádku: nástroj pro měření návštěvnosti, cookie lišta nebo widget, který jste vložili sami. Prozkoumejte vše, co neodpovídá ničemu, co jste instalovali, zejména skript, který skládá adresu z kódů znaků.
V Nastavení > Obecné musí pole „Instalace WordPressu (URL)“ a „Úvodní stránka webu (URL)“ obsahovat vaši doménu. Stejné hodnoty lze vynutit ve wp-config.php konstantami WP_HOME a WP_SITEURL: zkontrolujte obě místa.
wp option get home
wp option get siteurl
wp user list --role=administrator
Když jsou konstanty definované, první dva příkazy vrátí jejich hodnotu. Poslední vypíše administrátory s datem registrace; v administraci získáte stejný seznam v nabídce Uživatelé, s filtrem na roli Administrátor. Účet, který nikdo nepoznává, smažte a jeho obsah přiřaďte legitimnímu účtu.
Smazáním řádku, který přesměrovává, zastavíte příznak. Přístup, který útočník použil, zůstává otevřený, dokud ho nenajdete, a přesměrování se během několika dní vrátí. Pořadí, které funguje:
wp-admin a wp-includes a spusťte wp core download --skip-content --force, který jádro přepíše, aniž by se dotkl vašich pluginů, šablon a médií. Příkaz přepisuje existující soubory, ale žádný přidaný soubor nesmaže: proto se obě složky mažou nejdřív a proto neznámé soubory PHP v kořeni odstraníte ručně.wp-content/uploads, pravidla přidaná do .htaccess a skripty nalezené v databázi.wp cron event list: úloha s neznámým názvem může kód vložit znovu.Pokud web uchovává osobní údaje (formuláře, zákaznické účty, objednávky), poznamenejte si čas, kdy jste napadení zjistili. V Evropské unii obecné nařízení o ochraně osobních údajů (GDPR) ukládá ohlásit porušení zabezpečení osobních údajů dozorovému úřadu do 72 hodin od okamžiku, kdy se o něm správce dozvěděl, ledaže je nepravděpodobné, že by toto porušení mělo za následek riziko pro práva a svobody fyzických osob.
Když Google přesměrování odhalí, Chrome může před otevřením webu zobrazit červenou stránku „Nebezpečný web“ a Google může pod váš výsledek vyhledávání připsat „Tyto stránky možná byly napadeny hackery“. Přehled Bezpečnostní problémy v Google Search Console ukazuje, co bylo zjištěno a na kterých adresách. Když je web vyčištěný, tlačítko Požádat o kontrolu spustí ověření.
Odstraněné přesměrování nechává otevřenou otázku: kdo se o web postará potom? Simafri převezme váš web na WordPressu, vrátí ho online na základ, který hostujeme, zabezpečujeme a udržujeme aktuální, a pak se o něj stará, měsíc co měsíc. Doména i obsah zůstávají vaše.
Vložený kód čte User-Agent prohlížeče a přesměrovává jen telefony. Kdo web spravuje, často z počítače, nic nevidí. Otestujte web z telefonu na mobilních datech nebo příkazem curl s identifikátorem mobilního prohlížeče.
Přeinstalace jádra přepíše soubory WordPressu, ale nesmaže ty, které tam mohl přidat útočník. Databáze, šablona, pluginy a složka médií zůstanou, jak jsou, a právě tam se přesměrování a přístup útočníka nacházejí nejčastěji. Čerstvé jádro je jeden krok čištění, spolu s databází, pluginy, účty a hesly.
Protože přístup, kterým bylo vloženo, tam pořád je: přidaný administrátorský účet, soubor PHP ukrytý mezi médii, naplánovaná úloha, zranitelný plugin. Každý z nich umožní kód po vyčištění vložit znovu. Zkontrolujte účty, složku wp-content/uploads, naplánované úlohy a verze pluginů a pak hesla změňte znovu.
Otevřete Google Search Console a přehled Bezpečnostní problémy: uvádí zjištěné problémy a příklady adres. Pokud web v Search Console ještě ověřený není, ověření záznamem DNS pokryje celou doménu.
Simafri
Promluvme si o vašem záměru
Řekněte nám v pár slovech, co potřebujete: rychle se vám ozveme.
Děkujeme! Vaše zpráva byla odeslána. Brzy se vám ozveme.
Máte raději e-mail? Napište nám na support@simafri.com.