Gestão e manutenção

Site WordPress pirateado: passo a passo para recuperar (e prevenir)

O site está esquisito. Aparecem redirecionamentos para casinos chineses. O Google diz "este site pode estar comprometido" nos resultados. Ou pior: o teu alojamento avisa que vai suspender a conta porque está a enviar 50.000 emails de spam por hora. Bem-vindo ao clube — todos os meses centenas de sites WordPress portugueses são pirateados.

A boa notícia: 90% dos casos resolvem-se em 2-6 horas se seguires um procedimento certo. A má: 90% dos donos de site agem em pânico, perdem dados e abrem buracos novos. Este guia é o procedimento. Lê do início ao fim antes de começar.

Sinais de que o site foi pirateado

Confirma antes de declarar emergência. Sinais típicos:

  • Redirecionamentos estranhos — visitantes acabam em sites de aposta, viagra, malware.
  • Páginas novas que não criaste com URLs tipo /asdfgh1234/cheap-shoes.html.
  • Aviso do Google em Search Console: "Site comprometido" ou "Malware detetado".
  • Aviso do alojamento sobre envio de spam ou pico de tráfego suspeito.
  • Login no admin não funciona — palavra-passe foi alterada.
  • Plugins novos instalados que não reconheces (nomes genéricos tipo "wp-mailer", "stats-plugin").
  • Site carrega lentíssimo sem razão (crypto miners a correr).
  • Avisos no antivírus dos visitantes.
  • Em código-fonte aparecem blocos de JavaScript ofuscado ou base64.

Confirmaste? Avança.

Passo 1 — Isolar imediatamente (5 minutos)

Antes de qualquer limpeza, trava o estrago:

  1. Modo manutenção — ativa via plugin ou via .htaccess:

    RewriteEngine On
    RewriteCond %{REMOTE_ADDR} !^O\.TEU\.IP$
    RewriteRule .* /maintenance.html [R=503,L]
    

    Substitui O.TEU.IP pelo teu IP público (vê em whatismyip.com).

  2. Bloqueia acesso ao painel — adiciona regra de IP allowlist ao wp-admin/.htaccess:

    Order Deny,Allow
    Deny from all
    Allow from O.TEU.IP
    
  3. Desliga cronjobs que possam estar a propagar malware. No alojamento → cPanel → Cron jobs → desativar.

  4. Comunica ao alojamento. Abre ticket de emergência. Maioria dos alojamentos PT tem equipa de segurança.

Site agora está em quarentena. Podes investigar sem o atacante continuar a operar.

Passo 2 — Snapshot forense (10 minutos)

Antes de limpar nada, guarda evidência. Se mais tarde precisas de identificar o vetor de ataque ou recorrer a seguros, vais querer isto.

  • Backup completo do estado atual — base de dados + ficheiros. Sim, mesmo infetado. Guarda à parte, não restaures isto.
  • Captura de ecrã do que está visível: páginas comprometidas, redirecionamentos, painel admin.
  • Lista de IPs que acederam recentemente (logs do alojamento → access.log).
  • Lista de ficheiros modificados nas últimas 48-72h:
    find . -mtime -3 -type f -name "*.php"
    

Guarda tudo numa pasta forense-AAAAMMDD/ fora do site.

Passo 3 — Escaneamento (15-30 minutos)

Identifica o que está infetado.

Online (sem instalar nada):

  • Sucuri SiteCheck (sitecheck.sucuri.net) — gratuito, identifica malware visível.
  • Google Safe Browsing — verifica se Google sinalizou.

No alojamento (via SSH ou painel):

  • Wordfence scan — se ainda consegues aceder ao admin, corre scan completo (pode demorar 30-60 min).
  • MalCare ou WP Hacked Help — alternativas pagas que detetam mais.
  • Procura manual por strings suspeitas:
    grep -rn "eval(base64_decode" wp-content/
    grep -rn "eval(gzinflate" wp-content/
    grep -rn "<?php @include" wp-content/uploads/
    

Anota cada ficheiro infetado antes de apagar. Vais precisar da lista.

Passo 4 — Restaurar a partir de backup limpo (1-2 horas)

A forma mais segura de limpar é restaurar uma versão pré-infeção. Não tentes "limpar à mão" — sempre escapa coisa.

  1. Identifica quando começou. Olha os logs, ficheiros modificados, queixas. Se a infeção começou há 5 dias, restaura backup de há 7 dias.
  2. Restaura os ficheiros (wp-content/, raiz) a partir do backup limpo.
  3. Restaura a base de dados se necessário. Cuidado: vais perder pedidos/conteúdo desde o backup. Avalia o tradeoff.
  4. Atualiza WordPress core, plugins e tema para a versão mais recente. Versão antiga = porta de entrada provável.
  5. Apaga ficheiros que não estavam no backup — qualquer coisa estranha em wp-content/uploads/ que termine em .php é altamente suspeita.

Se não tens backup limpo:

  • Considera serviço profissional de limpeza (Sucuri, Wordfence Care, agências PT especializadas). Custo: 150-500€.
  • Ou reconstrói o site do zero, importando apenas o conteúdo (posts, páginas) via export limpo.

Passo 5 — Repor TODAS as credenciais (30 minutos)

Assume que o atacante tem todas as palavras-passe. Mudar uma é inútil.

  • Palavras-passe de todos os utilizadores admin — força reset.
  • Sal e chaves do wp-config.php — gera novas em api.wordpress.org/secret-key/1.1/salt/. Isto invalida todos os cookies de sessão ativos.
  • Palavra-passe da base de dados — muda no cPanel + atualiza wp-config.php.
  • FTP/SFTP — palavras-passe novas. Se possível, desliga FTP e usa só SFTP.
  • Conta do alojamento — palavra-passe nova + ativa 2FA.
  • Email associado — verifica se foi acedido; muda palavra-passe; ativa 2FA.
  • Chaves de API (Stripe, ifthenpay, GA4) — rotaciona.

Sem isto, qualquer limpeza é em vão. O atacante volta em horas.

Passo 6 — Blindar contra repetição (1 hora)

Volta-se a abrir o site só depois disto:

  • Atualiza tudo ao último patch. Core, tema, plugins.
  • Remove tema/plugins inativos — superfície de ataque desnecessária.
  • Instala plugin de segurança se ainda não tinhas (Wordfence ou Solid Security).
  • Ativa firewall a nível de DNS — Cloudflare (gratuito) já bloqueia 80% das tentativas.
  • Restringe wp-admin por IP se possível (allowlist).
  • Desativa edição de ficheiros via admin — adiciona ao wp-config.php:
    define('DISALLOW_FILE_EDIT', true);
    
  • Restringe execução de PHP em uploads.htaccess em wp-content/uploads/:
    <Files *.php>
    deny from all
    </Files>
    
  • Ativa 2FA para todos os admins.
  • Cria backup novo — agora é a tua base limpa.

Ver segurança WordPress para o setup completo.

Passo 7 — Comunicar (30 minutos)

Obrigatório, especialmente se há dados pessoais envolvidos.

Ao Google

  • Google Search Console → "Problemas de segurança" → "Solicitar análise" depois de limpar. Sem isto, o aviso "site comprometido" pode permanecer dias.

Aos utilizadores (se aplicável)

Se há indício de que dados foram acedidos:

  • Email a clientes afetados explicando o que aconteceu, o que fizeste, o que devem fazer (mudar palavra-passe).
  • Comunicação à CNPD dentro de 72h se há dados pessoais comprometidos (artigo 33 do RGPD). Não cumprir = coima possível. Ver conformidade RGPD do site.

Aos visitantes

  • Banner ou aviso durante alguns dias a confirmar resolução.
  • Resposta pronta a quem pergunta nas redes sociais.

Comunicação atempada salva reputação. Esconder torna pior.

Quanto custa (tempo e dinheiro)

CenárioTempoCusto
Tens backup limpo + competência técnica2-4h0€ (só tempo)
Tens backup limpo + agência4-8h300€-800€
Sem backup + agência1-3 dias500€-2.000€
Site grande/loja sem backup3-7 dias1.000€-5.000€

Vantagem clara para quem mantém backups regulares testados.

Como evitar a próxima vez

Os 5 vetores responsáveis por 90% dos hacks de PME:

  1. Plugins/temas piratas (nulled) — 70% têm backdoor. Nunca uses.
  2. Plugins desatualizados — bug conhecido + sem patch = porta escancarada.
  3. Palavras-passe fracas/repetidas — sem 2FA é convite. Ver SSL e HTTPS.
  4. Alojamento partilhado mal configurado — vizinho infetado contagia. Considera upgrade.
  5. Ausência de WAF — sem firewall, ataques automatizados acertam mais cedo ou mais tarde.

Prevenção custa ~80-150€/mês de manutenção. Limpeza custa 500-2.000€ + dias offline + perda de tráfego. A matemática faz-se sozinha.

A regra que junta tudo

Recuperar um site WordPress pirateado é, em 95% dos casos, um procedimento mecânico — isolar, escanear, restaurar, rotacionar credenciais, blindar, comunicar. O que mata sites portugueses não é a complexidade do ataque; é o pânico que leva a saltar passos, e a ausência de backup que torna a limpeza dolorosa.

Tem o procedimento por escrito antes de precisares. Tem backup automático e testado. Tem 2FA em tudo. No dia em que acontecer (e acaba sempre por acontecer), perdes 3 horas, não 3 semanas.


No sitesfixe.pt limpamos sites WordPress comprometidos e blindamos contra reincidência — restauro, hardening, monitorização e comunicação à CNPD se necessário. Manutenção desde 80€/mês. Pede um orçamento sem compromisso.

Lê também:

Fontes

Precisas de um site ou loja online?

Agência digital portuguesa. Sites e lojas online rápidos, otimizados para o Google e feitos para resultado.

Pedir orçamento