/

7 Erros Críticos de Segurança em Sites WordPress (e Como Corrigi-los de Forma Profissional)

7 Erros Críticos de Segurança em Sites WordPress

A segurança de um site WordPress frequentemente é negligenciada — até que um incidente ocorre. A boa notícia? A maioria das invasões acontece por erros de configuração simples. Este guia detalhado, voltado para profissionais técnicos, apresenta os 7 erros mais comuns e seus hardens corretivos, embasados em frameworks como o princípio do menor privilégio, defesa em profundidade e redução da superfície de ataque.

1. Permissões Excessivas no Servidor (Princípio do Menor Privilégio)

O Que Acontece

Permissões como 777 permitem que invasores executem, modifiquem ou leiam arquivos arbitrários, violando diretamente a segurança do servidor.

Como Detectar

find /var/www/html -type d -perm 0777
find /var/www/html -type f -perm 0666

Como Corrigir

find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;chmod 600 /var/www/html/wp-config.phpchown -R www-data:www-data /var/www/html

Proteção Adicional

<Directory /var/www/html/wp-includes>
    Require all denied
</Directory>

2. Arquivos Padrão Expostos (readme.html, license.txt, wp-config-sample.php…)

O Que Acontece

Arquivos como readme.html, license.txt, wp-config-sample.php e install.php não são utilizados pela operação do site e expõem a versão do WordPress, auxiliando atacantes.

Como Corrigir

  • Remover via FTP/SFTP ou script automatizado.
  • Bloquear via .htaccess:
<FilesMatch "^(readme\.html|license\.txt|wp-config-sample\.php|install\.php)$">
    Require all denied
</FilesMatch>
  • Plugin customizado para retornar 404 ou 403, se remoção não for viável.

3. Diretórios Ocultos mas Públicos (Backups, staging…)

O Que Acontece

Backups ou pastas antigas expostos publicamente podem trazer dados sensíveis ou permitir upload de código.

Como Detectar

find /var/www/html -type f \( -iname "*.zip" -o -iname "*.bak" -o -iname "*.sql" \)

Como Corrigir

  • Mova os arquivos sensíveis para fora do diretório público.
  • Bloqueie o acesso via .htaccess:
<FilesMatch "\.(zip|sql|bak)$">
    Require all denied
</FilesMatch>

4. Painéis Administrativos Expostos (/wp-admin, /wp-login.php)

O Que Acontece

URLs padrão são alvos fáceis para ataques de força bruta e bots automatizados.

Como Corrigir

  • Use plugins como WPS Hide Login para mudar a URL.
  • Ative autenticação multifator (MFA).
  • Restrinja acesso por IP:
<Files wp-login.php>
    Require ip 123.123.123.123
</Files>
  • Aplique rate limiting com plugins como Limit Login Attempts Reloaded.

5. HTTPS Ausente ou Mal Configurado

O Que Acontece

Sites sem HTTPS transmitem credenciais e sessões em texto claro, abrindo brechas a ataques MitM.

Como Corrigir

  • Instale SSL com Certbot:
sudo certbot --apache -d seudominio.com -d www.seudominio.com
  • Configure no Apache:
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite HIGH:!aNULL:!MD5
  • Redirecione todo HTTP para HTTPS:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

6. Headers de Segurança HTTP Ausentes

O Que Acontece

Sem headers adequados, o site está vulnerável a XSS, clickjacking, MIME sniffing e rastreamento invasivo.

Como Corrigir

Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), microphone=()"
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https://maps.googleapis.com; font-src 'self' https://fonts.gstatic.com; frame-src https://www.google.com;"

Evite unsafe-inline quando possível: prefira nonce ou hash para scripts inline.


7. Exposição do Endpoint /wp-json/wp/v2/users (REST API)

O Que Acontece

O endpoint expõe lista de usuários (nomes e IDs), facilitando ataques direcionados de força bruta.

Como Corrigir

Opção A: Bloqueio total para usuários não autenticados:

add_filter('rest_authentication_errors', function($result) {
    if (!is_user_logged_in()) {
        return new WP_Error('rest_not_logged_in', 'Autenticação necessária', ['status'=>401]);
    }
    return $result;
});

Opção B: Remover o endpoint completamente:

add_filter('rest_endpoints', function($endpoints) {
    if (isset($endpoints['/wp/v2/users'])) unset($endpoints['/wp/v2/users']);
    if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
    return $endpoints;
});

Esses filtros devem ser adicionados em functions.php do tema ou via plugin customizado.


8. Evitar uso de cron.php ou WP-Cron público

O Que Acontece

O arquivo wp-cron.php é um recurso do WordPress que é acionado a cada acesso público, podendo causar carga alta ou ser explorado por bots.

Como Corrigir

  • Desative o WP-Cron padrão e configure cron real no servidor Unix:
define('DISABLE_WP_CRON', true);
  • No crontab:
*/15 * * * * curl -s https://seudominio.com/wp-cron.php > /dev/null 2>&1
  • Proteja o acesso via .htaccess:
<Files wp-cron.php>
    Require ip 123.123.123.123
</Files>

9. Práticas Adicionais Relevantes

  • Desativar XML-RPC se não usado: controla login remoto e pingbacks.
  • Forçar senhas fortes e expiração (PHP ou plugin).
  • Atualizações automáticas do core, plugins e temas.
  • Desativar edição de arquivos via dashboard:
define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true);

Conclusão

Segurança é um processo contínuo, não um checklist único. Cada medida aqui reduz a superfície de ataque e reforça uma postura defensiva sustentável.

Checklist Técnico para Implantação

  •  Permissões dos arquivos e diretórios ajustadas.
  •  Arquivos padrão (readme, license, install) removidos ou bloqueados.
  •  Diretórios sensíveis não acessíveis publicamente.
  •  Painel administrativo protegido.
  •  HTTPS com configuração robusta.
  •  Headers HTTP de segurança aplicados.
  •  Endpoint /users REST API desativado.
  •  wp-cron desativado ou protegido.
  •  XML-RPC desativado se não for necessário.
  •  Estrutura de senhas fortes ativada.
  •  Atualizações automatizadas configuradas.
  •  Monitoramento, WAF e auditoria implementados.

Com essas diretrizes técnicas e estratégicas, seu ambiente WordPress estará preparado para enfrentar a maioria dos ataques automatizados e ameaças conhecidas.

Faça um Diagnóstico Gratuito do Seu Site com a Plataforma COA

Quer saber se o seu domínio e site estão realmente seguros?

Acesse agora a COA – Cyber Offensive Assessment, nossa plataforma de análise ofensiva automatizada, e receba gratuitamente um relatório completo de segurança sobre o seu domínio.

Você vai descobrir:

  • Falhas nos headers HTTP
  • Problemas de criptografia (SSL/TLS)
  • Serviços expostos desnecessariamente
  • Padrões de configuração inseguros
  • E outras vulnerabilidades que colocam seu site em risco

→ Solicite sua análise gratuita agora e veja como sua superfície de ataque está exposta na internet antes que os atacantes descubram.