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

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);
- Implementar WAF ou regras de firewall de aplicação (como no Cloudflare ou ModSecurity).
- Monitoramento e auditoria contínua: logs, IDS/IPS, alertas de integridade.
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.