Para saber se o seu site WordPress foi invadido, não basta abri-lo no navegador: a maioria das infecções se esconde do administrador logado. É preciso procurá-las onde elas vivem: no índice do Google, em certos arquivos, no banco de dados e nas tarefas agendadas. Este guia passa pelas oito infecções mais comuns e, para cada uma, mostra o sintoma, o comando ou a ferramenta que a confirma e os falsos positivos que vale conhecer.
Se você quer primeiro uma triagem rápida dos sinais de alerta, comece pelos sinais de um site WordPress invadido e depois volte aqui para confirmar infecção por infecção.
Por que uma invasão passa despercebida
O invasor tem todo o interesse em ser discreto: um site que funciona normalmente para o dono continua servindo aos objetivos dele por meses. Por isso o código malicioso verifica quem está pedindo. Um administrador logado vê a página normal, um visitante no celular vindo do Google é redirecionado e o robô do Google recebe páginas de spam. Em abril de 2026, a porta dos fundos escondida em mais de 30 plugins comprados (a suíte EssentialPlugin) só mostrava seu spam ao Googlebot, o que a tornava invisível para os donos dos sites.
Na prática: teste sempre a partir de outro ponto de vista que não o seu (janela anônima, rede móvel, ferramenta de inspeção de URL do Google, linha de comando) e procure nos arquivos e no banco de dados em vez de nas páginas.
As oito infecções e como identificá-las
1. Spam de SEO: palavras japonesas, farmácia, cassino
É a infecção mais comum. O invasor cria milhares de páginas (muitas vezes em pastas com nomes aleatórios) cheias de texto em japonês, remédios ou jogos de azar, para se aproveitar da reputação do seu domínio. O Google descreve em detalhe esse «hack de palavras-chave em japonês». Para identificá-lo, pesquise no Google:
site:seudominio.com.br casino
site:seudominio.com.br viagra OR cialis OR pharmacy
site:seudominio.com.br 激安
site:seudominio.com.br inurl:.html
A terceira pesquisa mira uma palavra japonesa muito frequente nesse spam («preço de banana»). A última revela páginas .html que o WordPress normalmente não gera. No Search Console, o relatório Desempenho também mostra consultas em um idioma que você não usa.
2. Páginas desconhecidas no índice e um proprietário a mais
No Search Console, abra Configurações e depois «Usuários e permissões»: um proprietário que você não conhece é um sinal forte, porque os invasores se adicionam para indexar suas páginas. Depois veja o relatório Sitemaps: um sitemap que você não enviou, ou um número de páginas descobertas que dispara, confirma a injeção. A ferramenta de inspeção de URL mostra o que o Google realmente recebeu, mesmo que para você a página pareça retornar um erro 404.
3. Redirecionamentos só para celulares ou para quem vem do Google
Seus clientes reclamam de cair em um site de golpe e você não consegue reproduzir? O redirecionamento muitas vezes atinge só celulares, visitantes vindos de um buscador ou uma única visita por endereço IP. Teste na linha de comando imitando esses visitantes:
curl -sI -A "Mozilla/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X) Mobile" \
-e "https://www.google.com/" https://seudominio.com.br/
Um cabeçalho Location para outro domínio indica um redirecionamento no servidor. Se nada aparecer, o redirecionamento pode ser feito em JavaScript: abra o site em um smartphone na rede móvel, em janela anônima, clicando em um resultado do Google. Depois procure regras adicionadas no início do arquivo .htaccess.
4. Arquivos suspeitos no servidor
Conecte-se por SFTP ou SSH. Algumas buscas bastam para revelar os esconderijos habituais:
# PHP na pasta de mídia: não deveria haver nenhum
find wp-content/uploads -type f -name "*.php"
# Arquivos .ico que não são favicons, e linhas @include que os carregam
find . -type f -name "*.ico" ! -name "favicon.ico"
grep -rlE --include=*.php "@include.*\.ico" .
# Arquivos renomeados .suspected por um scanner da hospedagem
find . -name "*.suspected"
# Funções usadas com frequência para esconder código (muitos falsos positivos)
grep -rlE --include=*.php "eval\(|base64_decode\(|gzinflate\(|str_rot13\(" wp-content
# Arquivos PHP modificados nos últimos 14 dias, os mais recentes primeiro
find . -type f -name "*.php" -mtime -14 -printf "%TY-%Tm-%Td %p\n" | sort -r | head -40
Um arquivo .ico com PHP dentro, um nome como wp-user.php na raiz ou um arquivo PHP em uploads são indícios fortes. Arquivos .suspected significam que um scanner já encontrou uma infecção: o código que os criou pode continuar lá. Lembre também que a data de modificação se falsifica com um comando: um arquivo datado de 2019 não está necessariamente limpo.
5. Arquivos do núcleo modificados
O WP-CLI compara seus arquivos com os checksums publicados pelo WordPress.org. É o teste mais confiável para o núcleo e os plugins gratuitos:
wp core verify-checksums --include-root
wp plugin verify-checksums --all
Esses comandos não cobrem temas, plugins premium nem o wp-config.php. Abra então esse arquivo e leia o final: nada deve vir depois da linha require_once ABSPATH . 'wp-settings.php';. Era exatamente ali que a porta dos fundos da EssentialPlugin injetava seu código.
6. Contas de administrador desconhecidas
Algumas portas dos fundos escondem sua conta na lista de usuários do Painel. Consulte o banco de dados diretamente (troque wp_ pelo prefixo das suas tabelas):
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
wp db query "SELECT u.ID, u.user_login, u.user_email, u.user_registered
FROM wp_users u JOIN wp_usermeta m ON m.user_id = u.ID
WHERE m.meta_key = 'wp_capabilities' AND m.meta_value LIKE '%administrator%'"
Se a consulta SQL retornar mais contas do que wp user list ou a tela Usuários, há uma conta oculta. Uma data de cadastro em que ninguém trabalhou no site, ou um e-mail descartável, basta para tratar a conta como hostil.
7. Tarefas agendadas e plugins ocultos que reinfectam
Você apagou um arquivo e no dia seguinte ele voltou? Uma tarefa agendada ou um plugin «obrigatório» (pasta mu-plugins, carregado automaticamente e invisível na lista habitual) o recria.
wp cron event list --fields=hook,next_run_relative,recurrence
wp plugin list --status=must-use
wp plugin list --status=dropin
Um hook com nome aleatório, ou que não corresponde a nenhum plugin instalado, merece uma busca no código. Verifique também o crontab do servidor e as tarefas agendadas do painel da hospedagem. Nossa definição de cron explica a diferença entre os dois.
8. Injeções no banco de dados
Parte das infecções não toca em nenhum arquivo: vive no banco de dados. Três verificações cobrem os casos comuns:
# Endereço do site: um valor estranho redireciona o site inteiro
wp option get siteurl
wp option get home
# Scripts injetados nos conteúdos
wp db query "SELECT ID, post_title, post_status FROM wp_posts
WHERE post_content LIKE '%
Resultados legítimos são possíveis (um widget com código de análise, um post que mostra código): examine cada linha. Em uma loja WooCommerce, um script desconhecido na página de pagamento deve fazer pensar em roubo de cartões e exige reação imediata.
Os sinais externos: Search Console e listas de bloqueio
- Search Console, «Problemas de segurança» e «Ações manuais»: o Google aponta ali o conteúdo invadido, com exemplos de URL.
- Relatório de transparência do Google (Navegação segura): mostra se o seu domínio é considerado perigoso no momento. Se for o caso, siga nosso guia para sair da lista do Safe Browsing.
- Scanners remotos (Sucuri SiteCheck, VirusTotal): veem as páginas públicas e as listas de bloqueio, nada do que acontece no servidor.
- E-mail: mensagens caindo no spam dos seus clientes ou devoluções em massa de «não entregue» podem indicar um script que envia spam.
Tabela-resumo
| Infecção | Sintoma | Confirmação | Falso positivo comum |
|---|---|---|---|
| Spam de SEO | Títulos estrangeiros no Google | Pesquisas site:, Search Console | Páginas antigas apagadas ainda em cache |
| Redirecionamento direcionado | Reclamações de visitantes no celular | curl com User-Agent móvel e Referer | Redirecionamento legítimo de idioma ou app |
| Porta dos fundos | Muitas vezes nenhum | Busca de arquivos, checksums | Código codificado de um plugin comercial |
| Conta oculta | Nenhum no Painel | Consulta SQL sobre as funções | Conta técnica da hospedagem |
| Reinfecção | Arquivos que voltam | Cron, mu-plugins, crontab do servidor | Tarefas de um plugin de cache ou backup |
| Injeção no banco | Scripts desconhecidos nas páginas | Consultas em conteúdos e opções | Códigos de análise de tráfego |
Ser avisado em vez de procurar
Essas verificações levam uma hora; ninguém as faz toda semana. O WP Masquerade Pro automatiza parte da detecção, sem se apresentar como o que não é:
- Verificação de integridade: todos os dias, os arquivos do núcleo são comparados com a lista oficial do WordPress.org; arquivos modificados, ausentes e arquivos PHP desconhecidos em
wp-adminouwp-includessão informados por e-mail. - Registro de atividades: criação de um administrador, mudança de função, plugin instalado no meio da noite, e-mail da conta alterado.
- Alertas: login de um administrador em um dispositivo desconhecido, nova vulnerabilidade conhecida em um plugin instalado, relatório toda segunda-feira.
Limites a conhecer: a verificação de integridade cobre o núcleo, não plugins, temas, mídia nem o banco de dados; o registro não vê o que passa por FTP. O WP Masquerade não é um antivírus: para analisar o wp-content e o banco de dados, adicione um scanner como os apresentados em Wordfence e WP Masquerade ou MalCare e WP Masquerade.
Se você encontrar algo
Não apague nada às pressas. Copie os arquivos suspeitos e os logs do servidor (eles datam a invasão), coloque o site em manutenção e siga o procedimento de limpeza passo a passo. Depois da limpeza, aplique o método para proteger o WordPress para evitar reinfecção, e peça a revisão ao Google se páginas de spam foram indexadas.
Perguntas frequentes
Meu site parece normal: ele pode estar invadido mesmo assim?
Sim. Muitas infecções só aparecem para os robôs dos buscadores, para visitantes no celular ou para quem não está logado. Uma porta dos fundos também pode ficar em silêncio até ser ativada.
Como verificar sem acesso SSH?
Faça as verificações externas (pesquisas site:, Search Console, relatório de transparência), percorra as pastas por SFTP ordenando por data e use o phpMyAdmin para as consultas SQL. Um scanner instalado no WordPress completa essas verificações.
Um resultado com base64_decode significa invasão?
Não necessariamente: plugins legítimos também usam essa função. O que alerta é a combinação: função de codificação, arquivo em local incomum, data recente e nome que imita um arquivo do WordPress.
O WP Masquerade detecta malware?
O Pro detecta alterações nos arquivos do núcleo e ações suspeitas das contas, e avisa você. Não é um antivírus: não analisa o código de plugins e temas nem o banco de dados.
Para lembrar
- As infecções se escondem do administrador: teste como o Google, como um celular e pela linha de comando.
- Pesquisas site: e o Search Console revelam o spam de SEO e os proprietários adicionados.
- Arquivos: PHP em uploads, .ico com PHP dentro, .suspected, final do wp-config.php.
- Contas e persistência: compare SQL e Painel, leia cron e mu-plugins.
- Banco de dados: siteurl, scripts nos conteúdos e nas opções.
Saiba antes dos seus clientes
O WP Masquerade Pro verifica todos os dias a integridade do núcleo, registra as ações dos administradores e avisa você por e-mail. A versão gratuita já reduz o que os robôs veem do seu site.
Fontes
- web.dev: Fix the Japanese keyword hack (link externo, abre em uma nova aba)
- WP-CLI: wp core verify-checksums (link externo, abre em uma nova aba)
- Google: relatório de transparência da Navegação segura (link externo, abre em uma nova aba)
- BleepingComputer: WordPress plugin suite hacked to push malware (link externo, abre em uma nova aba)


