Percio Castelo.
EN Início
Checklist definitivo de segurança e hardening para WordPress: 99 medidas técnicas em 11 áreas críticas
← Voltar para blog

Checklist definitivo de segurança e hardening para WordPress: 99 medidas técnicas em 11 áreas críticas

11/09/2026 · 9 min · WordPress · 622 visualizações

O WordPress é a plataforma de gerenciamento de conteúdo mais utilizada no mundo, alimentando mais de 40% de toda a web. Exatamente por essa popularidade massiva, também representa o alvo prioritário de varreduras automatizadas, redes zumbis de força bruta e campanhas de injeção de malware.

Uma instalação padrão do WordPress prioriza a facilidade de instalação e a retrocompatibilidade em detrimento da segurança restritiva. Sem um processo rigoroso de hardening em profundidade, o ambiente expõe vetores críticos: enumeração pública de usuários, execução de scripts arbitrários em diretórios de mídia, consultas recursivas no XML-RPC e configurações frouxas no servidor web.

Neste guia técnico, estruturei e documentei o Checklist Definitivo de Segurança e Hardening para WordPress, composto por 99 medidas práticas distribuídas em 11 áreas arquiteturais fundamentais.


1. Núcleo e configuração (wp-config.php)#

O arquivo wp-config.php reside no coração da aplicação. Ele orquestra credenciais de banco de dados, chaves de criptografia e parâmetros de depuração.

  1. Alterar as chaves de segurança (Salts) periodicamente

As chaves AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY e NONCE_KEY garantem que tokens de sessão e cookies sejam criptografados com entropia suficiente. Trocar essas chaves força o logout de todas as sessões ativas (essencial após resposta a incidentes).

   // Valores de exemplo — gere os seus em https://api.wordpress.org/secret-key/1.1/salt/
   define('AUTH_KEY',         'b!z8#K9*xL2m@1vPq9$J7wZ#rE4tY6uI');
   define('SECURE_AUTH_KEY',  'c@3vB7$mK9#xL1wPq8*J6yZ!rE5tY4uO');
   define('LOGGED_IN_KEY',    'x#9vM2*kL8@1wPq7$J5xZ#rE6tY3uP1b');
   define('NONCE_KEY',        'k*7vQ4#mL9$1wPq6*J4wZ!rE7tY2uA9c');

2. Página e fluxo de autenticação (/wp-login.php)#

A interface de login é a principal porta de entrada exposta à internet. O objetivo é anular ataques de dicionário e proteger credenciais contra interceptação.

  1. Bloquear múltiplas tentativas incorretas de login

Implemente limitação de taxa (rate limiting) para frear tentativas automatizadas de senha.

  1. Impor Autenticação de Dois Fatores (2FA/MFA)

Obrigue o uso de aplicativos autenticadores (TOTP) para administradores e editores.

  1. Desabilitar mensagens de erro detalhadas no login

Evite que o WordPress confirme se um nome de usuário existe ou se apenas a senha está incorreta.

   add_filter('login_errors', function() {
       return 'Credenciais inválidas. Verifique os dados inseridos.';
   });
  1. Configurar reCAPTCHA v3 ou Cloudflare Turnstile

Proteja o formulário contra submissões robotizadas sem friccionar o usuário legítimo.

  1. Alterar a URL padrão de login (wp-login.php)

Ofuscar o endpoint padrão para um slug customizado reduz em mais de 90% o ruído de bots não direcionados.

  1. Forçar uso estrito de SSL/TLS na autenticação

Garante que nenhum token de autenticação trafegue em texto puro.

   define('FORCE_SSL_ADMIN', true);
  1. Definir tempo limite restritivo de sessão (Session Timeout)

Encerre sessões ociosas automaticamente para prevenir sequestro de sessão em máquinas compartilhadas.


3. Painel administrativo (/wp-admin)#

A área administrativa exige restrições de privilégio e controle de perímetro rígido.

  1. Desabilitar o editor de arquivos integrado do WordPress

Previne que um atacante com credenciais administrativas altere arquivos PHP do tema ou plugin via painel.

   define('DISALLOW_FILE_EDIT', true);
  1. Desabilitar instalação e atualização de plugins/temas pelo painel

Em ambientes de produção com CI/CD, bloqueie modificações em tempo de execução:

    define('DISALLOW_FILE_MODS', true);
  1. Restringir acesso ao /wp-admin por Lista de IPs Confiáveis

Bloqueie o diretório no Nginx ou Apache liberando apenas o IP do escritório ou VPN da equipe.

  1. Camada de Autenticação Básica (HTTP Basic Auth) no /wp-admin

Uma barreira antes do PHP ser invocado, economizando recursos de CPU durante ondas de ataque.

  1. Desativar usuário padrão admin

Crie um nome de usuário único e não previsível para privilégios elevados.

  1. Aplicar Princípio do Menor Privilégio nos papéis de usuário

Nunca utilize perfil de Administrador para autores ou criadores de conteúdo que precisam apenas publicar posts.


4. Temas e camada de apresentação#

  1. Remover temas inativos e padrão desnecessários

Mantenha apenas o tema ativo e um tema de fallback padrão atualizado para emergências.

  1. Utilizar sempre Child Themes para customizações

Evita alterações diretas no código base e garante que patches de segurança do tema pai possam ser aplicados.

  1. Auditar chamadas a funções inseguras em templates (eval, base64_decode)

Código ofuscado em temas de terceiros geralmente indica backdoors pré-instaladas.

  1. Eliminar arquivos de demonstração e dependências de debug no tema

Remova arquivos .git, composer.json, package.json e documentações expostas publicamente.


5. Práticas seguras de desenvolvimento#

  1. Desabilitar WP_DEBUG_DISPLAY e manter WP_DEBUG_LOG protegido

Erros de PHP nunca devem vazar caminhos do servidor ou dumps de consultas SQL para o navegador.

    define('WP_DEBUG', true);
    define('WP_DEBUG_DISPLAY', false);
    define('WP_DEBUG_LOG', true);
    @ini_set('display_errors', 0);
  1. Bloquear acesso a arquivos de ambiente e versionamento (.env, .git)

No Nginx:

    location ~ /\.(git|env|bak|config) {
        deny all;
        return 404;
    }
  1. Sanitizar e validar todas as entradas com funções nativas do WordPress

Utilize sanitize_text_field(), absint(), esc_html() e esc_attr() em qualquer dado manipulado.

  1. Proteger requisições com Nonces (wp_verify_nonce)

Impedir ataques de Cross-Site Request Forgery (CSRF) em ações de formulários e rotas AJAX.

  1. Remover scripts e bibliotecas JS em desuso

Desregistre scripts desnecessários como jQuery Migrate ou Dashicons no frontend público.

  1. Adotar pipeline automatizado de SAST para plugins customizados

Execute ferramentas como PHPStan, Semgrep e PHPCS com WordPress Coding Standards antes de cada deploy.


6. Gestão e auditoria de plugins#

  1. Instalar apenas plugins do repositório oficial ou fornecedores verificados

Evite qualquer plugin "nulled" ou pirata, vetor número um de injeção de web shells.

  1. Remover completamente plugins desativados

Plugins desativados ainda contêm código PHP acessível diretamente se permissões permitirem.

  1. Limitar o número total de plugins ativos

Menos código em execução significa menor superfície de ataque e menor latência TTFB.

  1. Habilitar atualizações automáticas para correções de segurança (Minor Releases)
  2. Auditar dependências de plugins contra bases de CVEs (WPScan / WP-Vulnerability)
  3. Monitorar plugins descontinuados ou removidos da WordPress.org

Se um plugin for removido do diretório oficial por questões de segurança, substitua-o imediatamente.


7. Banco de dados MySQL / MariaDB#

  1. Alterar o prefixo padrão das tabelas (wp_ para um valor aleatório)

Previne ataques de SQL Injection cegos que presumem nomes fixos como wp_users ou wp_posts.

    $table_prefix = 'nx94_';
  1. Utilizar usuário de banco com privilégios mínimos necessários

Mantenha SELECT, INSERT, UPDATE, DELETE mais ALTER, CREATE e INDEX para permitir upgrades de schema sem intervenção manual. Remova privilégios destrutivos desnecessários (como DROP e GRANT OPTION) e restrinja as permissões estritamente ao banco de dados da aplicação.

  1. Bloquear acesso remoto ao MySQL (vincular estritamente ao 127.0.0.1 ou socket Unix)
  2. Implementar rotina de backup criptografado fora do servidor com retenção auditada

Armazene dumps em storage imutável (ex: OCI Bucket com Object Lock / S3 WORM).


8. Infraestrutura e hospedagem#

  1. Utilizar PHP moderno (versão 8.2 ou superior) com suporte ativo de segurança

Versões antigas do PHP (7.x) deixaram de receber patches de segurança e contêm falhas críticas conhecidas.

  1. Isolamento de containers e usuários no sistema de arquivos (open_basedir e chroot)

Garante que uma falha em um site não comprometa outras aplicações compartilhadas no mesmo servidor.


9. Servidor web & sistema operacional Linux#

  1. Configurar permissões estritas de arquivos (644 para arquivos, 755 para pastas)
    find /var/www/html/ -type d -exec chmod 755 {} \;
    find /var/www/html/ -type f -exec chmod 644 {} \;
    chown root:www-data /var/www/html/wp-config.php && chmod 640 /var/www/html/wp-config.php
  1. Desabilitar a listagem de diretórios (Options -Indexes no Apache / autoindex off no Nginx)
  2. Ocultar assinaturas e versões do servidor (ServerTokens Prod, expose_php = Off)
  3. Configurar Cabeçalhos HTTP de Segurança Modernos:
  • Strict-Transport-Security (HSTS)
  • X-Content-Type-Options: nosniff
  • X-Frame-Options: SAMEORIGIN
  • Referrer-Policy: strict-origin-when-cross-origin
  • Permissions-Policy restritiva
  1. Implementar WAF de borda (Cloudflare / ModSecurity / Coraza)

Mitiga injeções SQL, XSS e ataques LFI antes que o tráfego atinja o PHP-FPM.


10. Segurança ofensiva & defensiva (hardening em profundidade)#

Esta seção concentra 36 medidas essenciais para anular vetores avançados de abuso:

  1. Desabilitar a API REST pública para usuários não autenticados (evita vazamento de autores via /wp-json/wp/v2/users).
  2. Bloquear completamente o arquivo xmlrpc.php

O XML-RPC é o principal vetor para ataques system.multicall (força bruta amplificada) e ataques de amplificação DDoS (pingback).

    location = /xmlrpc.php {
        deny all;
        access_log off;
        log_not_found off;
        return 403;
    }
  1. Bloquear execução de scripts PHP no diretório /wp-content/uploads/

Mesmo que um invasor consiga fazer upload de uma webshell, o servidor web recusa a execução direta:

    location ~* /wp-content/uploads/.*\.php$ {
        deny all;
        return 403;
    }
  1. Bloquear execução de PHP em /wp-content/themes/ e /wp-content/plugins/ (para arquivos não instanciados pelo roteador principal).
  2. Impedir acesso direto a arquivos de documentação e exemplo (license.txt, readme.html, wp-config-sample.php).
  3. Mover o arquivo wp-config.php um nível acima do webroot (o WordPress suporta isso nativamente quando nenhum outro arquivo existe no diretório pai).
  4. Bloquear enumeração de usuários por ID via query string (/?author=1)
    if ($query_string ~* "author=([0-9]+)") {
        return 403;
    }
  1. Filtrar caracteres maliciosos e sequências de Directory Traversal em URLs (../, eval(, base64_).
  2. Bloquear bots maliciosos e scrapers agressivos por User-Agent e assinaturas de ASN.
  3. Proteger o arquivo .htaccess e arquivos ocultos contra leitura externa.
  4. Restringir o endpoint /wp-admin/admin-ajax.php para usuários não autenticados quando desnecessário.
  5. Restringir a biblioteca de mídia para que usuários vejam apenas seus próprios uploads.
  6. Remover parâmetros de versão em scripts e folhas de estilo (?ver=x.x.x) para dificultar a identificação de versões de plugins.
  7. Desabilitar comentários sem cabeçalho Referer legítimo (reduzindo 98% do spam automático de comentários).
  8. Desabilitar Easter Eggs e exposição de versão do PHP (expose_php = Off).
  9. Configurar monitoramento de integridade de arquivos do WordPress (File Integrity Monitoring).
  10. Implementar política estrita de Content Security Policy (CSP) para prevenir execução de scripts inline não autorizados.
  11. Registrar e centralizar logs de auditoria de eventos administrativos (criação de usuários, login, edição de opções).

11. Performance, eficiência e otimização de recursos#

Segurança e desempenho andam lado a lado: um site rápido é menos vulnerável a esgotamento de conexões e ataques de negação de serviço em camada de aplicação (HTTP Flood).

  1. Habilitar compressão Gzip e Brotli no servidor web
  2. Configurar cabeçalhos de Cache (Cache-Control e Expires) para arquivos estáticos
    location ~* \.(jpg|jpeg|png|gif|ico|webp|svg|css|js)$ {
        expires 365d;
        add_header Cache-Control "public, no-transform";
    }
  1. Utilizar HTTP/2 ou HTTP/3 (QUIC) com multiplexação de conexões
  2. Implementar Full Page Caching (Redis Object Cache ou Nginx FastCGI Cache)

Permite responder a milhares de requisições por segundo servindo páginas cacheadas na memória RAM, sem tocar no MySQL.

  1. Converter todas as imagens para formato WebP ou AVIF
  2. Habilitar Carregamento Sob Demanda (Native Lazy Loading) em imagens e iframes
  3. Desabilitar o carregamento de Emojis do WordPress no frontend
    remove_action('wp_head', 'print_emoji_detection_script', 7);
    remove_action('wp_print_styles', 'print_emoji_styles');
  1. Desabilitar estilos e scripts do editor de blocos (Gutenberg) se o site utiliza temas clássicos
    add_action('wp_enqueue_scripts', function() {
        wp_dequeue_style('wp-block-library');
        wp_dequeue_style('wp-block-library-theme');
    }, 100);
  1. Mover scripts não críticos (jQuery, jQuery Migrate) para o rodapé ou carregar com defer
  2. Otimizar e limpar o banco de dados periodicamente (remover revisões antigas de posts, transientes expirados e spam)
    define('WP_POST_REVISIONS', 5);
  1. Minificar e combinar folhas de estilo CSS e arquivos JavaScript
  2. Distribuir conteúdo estático via Rede de Entrega de Conteúdo (CDN)
  3. Configurar pré-conexão DNS (dns-prefetch e preconnect) para serviços de terceiros essenciais.

Tabela de priorização e matriz de riscos#

Domínio ArquiteturalItens Críticos (Alta Prioridade)Complexidade de ImplantaçãoImpacto em Risco
Núcleo & wp-configSalts, isolamento e permissõesBaixaCrítico
Autenticação & Login2FA, Rate Limit, Bloqueio de ErrosMédiaAlto
Painel /wp-adminDesabilitar editor, Restringir IPsBaixaAlto
Banco de DadosPrefixo, Usuário restrito, BackupsMédiaCrítico
Hardening de ServidorBloqueio PHP em uploads, XML-RPCMédiaCrítico
Performance & CacheFull Page Cache, WebP, BrotliMédiaMédio

Conclusão: transformando hardening em processo contínuo#

A segurança no WordPress não é um estado estático obtido com a instalação de um plugin milagroso. Ela exige defesa em profundidade: isolamento no sistema operacional, regras preventivas no servidor web, configuração restritiva no núcleo e monitoramento contínuo de vulnerabilidades.

Aplicar essas 99 medidas transforma um ambiente padrão vulnerável em uma infraestrutura resiliente a ataques em massa, bots automatizados e agentes maliciosos.

Para auditar o seu site ponto a ponto e exportar relatórios de conformidade, utilize a ferramenta interativa WPLista:

👉 Acessar a ferramenta interativa WPLista (Checklist WordPress)

Este artigo foi útil?

Deixe uma reação rápida para apoiar o conteúdo:

622 leituras
Creative Commons Atribuição-NãoComercial

Este post está licenciado sob CC BY-NC.

Comentários

Participe da discussão abaixo.

0 comentários