Início » Guias » Como proteger arquivos e pastas do WordPress

Como proteger arquivos e pastas do WordPress, um Guia de Segurança

Proteger arquivos e pastas do WordPress é uma necessidade comum entre quem quer manter seu site seguro e estável. Ao seguir este passo a passo, você aprenderá de forma clara e objetiva como impedir acessos indesejados, evitar execução de scripts maliciosos e reforçar a segurança da estrutura de arquivos do seu WordPress, tudo com boas práticas recomendadas pela comunidade, e sem depender de plugins.

Ícone azul com um documento protegido por um escudo com cadeado, representando segurança e restrição de acesso a arquivos e pastas.

Proteger .htaccess e arquivos ocultos

Semelhantemente, impede o acesso via navegador a arquivos ocultos do servidor que começam com um ponto (.), como .htaccess, .htpasswd, .git, .env, entre outros.

Esses arquivos frequentemente contêm configurações sensíveis, senhas, ou informações internas do servidor. Por consequência, se acessíveis via URL (ex: https://site.com/.htaccess), podem expor falhas críticas de segurança.

Benefícios de proteger arquivos e pastas do WordPress

  • Impede leitura de arquivos de configuração crítica
  • Evita exposição de senhas (.htpasswd) e tokens (.env)
  • Protege estruturas internas do repositório (.git)

Código para Apache (.htaccess)

Adicione este trecho ao arquivo .htaccess da raiz do WordPress:

<FilesMatch "^\.">
    Require all denied
</FilesMatch>

Explicação do código:

  • <FilesMatch "^\.">: Aplica a regra a todos os arquivos cujo nome começa com .
  • Require all denied: Bloqueia o acesso totalmente (funciona no Apache 2.4+)

Alternativa para Apache 2.2 (mais antiga): Se o servidor usar Apache < 2.4, substitua por:

<FilesMatch "^\.">
    Order allow,deny
    Deny from all
</FilesMatch>

Código para NGINX

Esses arquivos são comuns em servidores e contêm dados sensíveis. Mesmo que o NGINX não use .htaccess, alguns plugins ou ferramentas podem gerar esses arquivos, e servidores mal configurados podem deixá-los expostos via navegador.

Coloque este bloco dentro do server {} correspondente ao seu site:

location ~ /\. {
    deny all;
    access_log off;
    log_not_found off;
}

Explicação do código:

  • location ~ /\.: Aplica a qualquer arquivo ou pasta que comece com ponto (.)
  • deny all: Bloqueia o acesso
  • access_log off; log_not_found off;: Evita registros de acesso e erros para esses arquivos (mantém os logs limpos)
Ícone azul com engrenagem e escudo com cadeado, simbolizando a proteção de configurações críticas do sistema, como o arquivo wp-config.php no WordPress.

Proteger o wp-config.php

Bloqueia o acesso ao arquivo wp-config.php via navegador. Esse arquivo é o mais sensível do WordPress, pois contém:

  • As credenciais do banco de dados (DB_NAME, DB_USER, DB_PASSWORD)
  • As chaves e salts de autenticação
  • Definições avançadas de segurança, debug, paths, etc.

Geralmente qualquer acesso indevido a esse arquivo pode comprometer completamente o site. Por isso, bloquear o acesso direto por HTTP é uma das medidas mais importantes de hardening (segurança avançada).

Benefícios

  • Impede o roubo de credenciais e chaves de segurança, por exemplo;
  • Inclusive, protege configurações personalizadas críticas;
  • Igualmente garante que o arquivo só possa ser acessado via servidor (PHP) e nunca por navegador.

Código para Apache (.htaccess)

Adicione no .htaccess da raiz do WordPress:

<Files wp-config.php>
    Order allow,deny
    Deny from all
</Files>

Além disso, é compatível com Apache 2.2 e versões modernas.

Código para NGINX

Adicione dentro do bloco server {} do seu nginx.conf ou site:

location = /wp-config.php {
    deny all;
    access_log off;
    log_not_found off;
}

Observações

  • O wp-config.php pode estar um nível acima da raiz do WordPress por segurança adicional. Se for o caso, o acesso direto por HTTP já estará bloqueado.
  • Com efeito, para reforçar a proteção do sistema de arquivos do WordPress, combine essa configuração com permissões de arquivo adequadas:
chmod 600 wp-config.php
Ícone azul com um disco rígido e cadeado, representando a restrição de acesso e a proteção contra listagem de diretórios no servidor.

Impedir listagem de diretórios

Evita que usuários vejam o conteúdo de pastas no navegador quando não existe um index.php ou index.html nelas.

Por padrão, se o servidor estiver mal configurado e uma pasta (como /wp-content/uploads/2025/) estiver acessível sem um arquivo index, o navegador pode exibir uma lista completa de arquivos, incluindo imagens, backups ou arquivos sensíveis.

Benefícios de blindar diretórios e arquivos sensíveis no WordPress

  • Oculta estrutura de diretórios e nomes de arquivos
  • Impede que visitantes (ou bots) explorem arquivos diretamente
  • Reduz exposição a ataques como scraping e engenharia reversa

Código para Apache (.htaccess)

Adicione no .htaccess da raiz do WordPress (ou de qualquer pasta):

Options -Indexes

Isso instrui o Apache a negar a listagem automática de conteúdo de diretórios com o intuito de proteger arquivos e pastas do WordPress.

Código para NGINX

Adicione dentro do bloco server {}:

autoindex off;

Você pode aplicar isso globalmente ou apenas em diretórios específicos, como:

location /wp-content/uploads/ {
    autoindex off;
}

Observações

  • Essa proteção é leve, rápida e essencial para qualquer site WordPress público.
  • Mesmo se um diretório estiver protegido por .htaccess contra execução de PHP, a listagem de arquivos pode continuar exposta se essa regra não for aplicada.
  • Ideal combinar com arquivos index.php vazios em diretórios críticos para proteger arquivos e pastas do WordPress com melhores resultados.
Ícone azul de uma figura em um laptop com expressão maliciosa, representando um invasor tentando executar código malicioso no servidor.

Bloquear execução de PHP em wp-content/uploads

Impede que arquivos .php enviados para a pasta uploads sejam executados. Essa pasta é usada por padrão para armazenar imagens, vídeos, PDFs e arquivos de mídia, de acordo com a documentação de hardening do WP não deveriam existir scripts PHP lá.

Do mesmo modo, atacantes que conseguem enviar arquivos maliciosos (via formulários vulneráveis, uploads não validados ou plugins mal projetados) costumam tentar colocar scripts PHP em /uploads/ para ganhar controle do site.

Essa proteção anula esse vetor de ataque, mesmo que o arquivo seja enviado com sucesso. Em outras palavras:

Benefícios

  • Bloqueia execução de shells PHP ocultos
  • Protege contra malware que usa uploads como porta de entrada
  • Essencial em ambientes com área de envio de arquivos (contato, portfólio, etc.)

Código para Apache (.htaccess)

Crie (ou edite) o arquivo .htaccess em wp-content/uploads/.htaccess:

<FilesMatch "\.php$">
    Order Deny,Allow
    Deny from all
</FilesMatch>

Com o intuito de proteger sua instalação WP, esse código bloqueia a execução de qualquer arquivo .php diretamente acessado via navegador.

Código para NGINX

Adicione no bloco server {} ou em uma location para uploads:

location ~* ^/wp-content/uploads/.*\.php$ {
    deny all;
}

Observações sobre como para proteger arquivos e pastas do WordPress

  • Essa medida é considerada obrigatória em qualquer política de hardening capaz de blindar diretórios e arquivos sensíveis no WordPress.
  • Você pode complementar adicionando um arquivo index.php vazio em /uploads/ para evitar listagem de diretórios também.
  • Combine com a etapa “Bloquear upload de arquivos perigosos” para reforçar a segurança e proteção do sistema de arquivos do WordPress.
Ícone azul com dois arquivos e um triângulo de alerta, representando o bloqueio de arquivos perigosos enviados ao servidor.

Bloquear upload de arquivos perigosos (ex: .php, .exe, .sh)

Impede que tipos de arquivos potencialmente perigosos sejam acessados mesmo que tenham sido enviados com sucesso para pastas como wp-content/uploads.

Embora o WordPress e alguns plugins limitem tipos de arquivos por padrão, ataques bem-sucedidos ou falhas de validação podem permitir o envio de scripts como:

  • .php (código executável)
  • .exe (executáveis Windows)
  • .sh, .py, .pl, .cgi (scripts de shell ou linguagens interpretadas)

Este bloqueio restringe o acesso a esses arquivos, prevenindo a execução remota e acesso direto.

Benefícios de garantir a segurança da estrutura de arquivos do WordPress

  • Reduz a superfície de ataque via upload;
  • De maneira idêntica, previne execução e acesso direto a arquivos maliciosos;
  • Acima de tudo, complementa a proteção de execução PHP em uploads.

Código para Apache (.htaccess)

Crie ou edite o arquivo wp-content/uploads/.htaccess:

<FilesMatch "\.(php|php5|php7|exe|sh|py|pl|cgi)$">
    Order Deny,Allow
    Deny from all
</FilesMatch>

Este bloqueio não impede o upload em si, mas torna esses arquivos inacessíveis via navegador, em razão disso quebrando a cadeia de ataque.

Código para NGINX

Adicione no nginx.conf ou no bloco do site:

location ~* \.(php|php5|php7|exe|sh|py|pl|cgi)$ {
    deny all;
}

Ou, se quiser restringir apenas dentro de /uploads/:

location ~* ^/wp-content/uploads/.*\.(php|php5|php7|exe|sh|py|pl|cgi)$ {
    deny all;
}

Observações

  • Com o propósito de impedir o upload na origem, use validação no servidor PHP ou plugins com filtro de tipo MIME.
  • Essa regra é defensiva e age depois do upload para neutralizar o arquivo.
  • Combine com a etapa Bloquear execução de PHP em uploads para máxima eficácia.
Ícone azul de um monitor com um olho e um símbolo de bloqueio, representando a restrição de acesso e execução de arquivos internos sensíveis.

Bloquear execução de PHP em wp-includes

Impede que arquivos .php dentro da pasta wp-includes sejam executados diretamente por requisições via navegador.

A pasta wp-includes/ é usada pelo WordPress, antes de mais nada, para armazenar seus arquivos internos e funções essenciais. Dessa forma, os arquivos PHP nessa pasta devem ser carregados apenas internamente pelo núcleo do WordPress, e nunca acessados diretamente pelo usuário via URL.

Bloquear esse acesso direto mitiga ataques que tentam explorar vulnerabilidades em arquivos do núcleo por meio de requisições maliciosas.

Benefícios de proteger arquivos e pastas do WordPress

  • Protege contra exploração direta de arquivos internos do WordPress
  • Impede execução remota de scripts legítimos fora do fluxo esperado
  • Reduz a superfície de ataque baseada no core

Código para Apache (.htaccess)

Crie ou edite o arquivo wp-includes/.htaccess:

<FilesMatch "\.php$">
    Order Deny,Allow
    Deny from all
</FilesMatch>

Isso bloqueia qualquer tentativa de acessar diretamente arquivos .php dentro de wp-includes via navegador, com o intuito de blindar diretórios e arquivos sensíveis no WordPress e proteger os arquivos e pastas do WordPress.

Código para NGINX

Adicione no bloco do site (server {}):

location ~* ^/wp-includes/.*\.php$ {
    deny all;
}

Observações

  • Essa regra não interfere no funcionamento do WordPress, já que o sistema carrega esses arquivos internamente.
  • Pode ser estendida para bloquear outros tipos de arquivos, se necessário.
  • Recomenda-se adicionar um index.php vazio também, para impedir listagem da pasta se o servidor estiver mal configurado.
Ícone azul com um escudo de segurança central e várias pessoas conectadas ao redor de uma mesa, representando o controle de permissões e acesso seguro a arquivos e pastas.

Ajustar permissões de arquivos e pastas

Corrige as permissões do sistema de arquivos para garantir que o WordPress funcione corretamente sem expor arquivos a riscos desnecessários.

Permissões excessivas (como 777 ou 775) são um dos vetores mais comuns de ataque, pois permitem que usuários não autorizados modifiquem ou executem arquivos.

Esta etapa define as permissões ideais para arquivos, pastas e arquivos críticos como wp-config.php e arquivos do sistema, por exemplo.

Benefícios de reforçar a proteção do sistema de arquivos do WordPress

  • Impede que scripts maliciosos alterem arquivos do WordPress
  • Protege arquivos de configuração de leitura não autorizada
  • Reduz o risco de escalonamento de privilégios e injeções via FTP ou shell

Permissões recomendadas

TipoPermissão
Pastas (/)755
Arquivos (*.*)644
wp-config.php600 (ou 640 em hospedagens compartilhadas)

Comando para ajustar permissões (Linux/Apache)

# Navegue até a raiz do WordPress
cd /caminho/para/seu/site

# Corrige permissões de pastas para 755
find . -type d -exec chmod 755 {} \;

# Corrige permissões de arquivos para 644
find . -type f -exec chmod 644 {} \;

# wp-config.php com permissão mais restrita
chmod 600 wp-config.php

Para ambientes com múltiplos usuários (como hospedagens compartilhadas)

chmod 640 wp-config.php

O grupo precisa ser configurado corretamente (ex: www-data) para evitar problemas de leitura. Verifique se o grupo de arquivos está correto com ls -l wp-config.php

Se o NGINX estiver rodando como www-data, o grupo do arquivo também precisa ser www-data para que ele consiga ler com permissão 640.

Observações

  • Nunca use 777 (totalmente aberto) em nenhum arquivo ou pasta. ⚠️
  • Refaça esse processo sempre que fizer upload manual de arquivos por FTP/SFTP.
  • Combine com um script de verificação recorrente (cron) se quiser manter essas permissões sempre corretas.
Ícone vermelho com três pessoas sob um escudo com cadeado, representando segurança avançada em ambientes colaborativos ou com múltiplos usuários.

(Opcional) Proteções Avançadas

Essas medidas oferecem proteção extra em ambientes muito controlados, onde o site tem plugins e temas estáticos ou onde você quer evitar acesso direto e indevido a recursos front-end para reforçar a proteção do sistema de arquivos do WordPress.

Bloquear execução de PHP em plugins e themes

Evita que scripts PHP sejam executados diretamente nessas pastas. Útil para proteger contra plugins ou temas maliciosos ou desatualizados que contenham arquivos expostos.

Apache (.htaccess) — um em cada pasta:

<FilesMatch "\.php$">
    Order Deny,Allow
    Deny from all
</FilesMatch>

NGINX

location ~* ^/wp-content/(plugins|themes)/.*\.php$ {
    deny all;
}

Bloquear execução direta de .js e .css para proteger arquivos e pastas do WordPress (uso interno e controlado)

Impede que arquivos JavaScript ou CSS sejam acessados diretamente pelo navegador.

Apache (.htaccess)

<FilesMatch "\.(js|css)$">
    Header set Content-Disposition attachment
</FilesMatch>

NGINX

location ~* \.(js|css)$ {
    add_header Content-Disposition attachment;
}

Conclusão

Este checklist cobre as principais ações para bloquear e proteger arquivos e pastas do WordPress, oferecendo um guia prático para reforçar a segurança da estrutura de arquivos do seu site.

Por meio de etapas bem definidas, você aprendeu como blindar diretórios sensíveis, corrigir permissões críticas, impedir a execução indevida de scripts em áreas vulneráveis (como uploads/) e proteger arquivos essenciais como .htaccess e wp-config.php.

Finalmente, as orientações aqui apresentadas foram elaboradas para funcionar em servidores Apache e NGINX, com foco em boas práticas de hardening que aumentam a resiliência do WordPress contra ameaças comuns, tudo sem depender de plugins externos.

  • Impedir acessos diretos a arquivos críticos (wp-config.php, .htaccess)
  • Proteger pastas vulneráveis como uploads e wp-includes
  • Corrigir permissões de arquivos e diretórios
  • Adicionar bloqueios estratégicos para execução indesejada de scripts

Essas medidas ajudam a prevenir ataques comuns como upload de shells, injeção de código e exploração de arquivos do núcleo, e são compatíveis tanto com Apache quanto com NGINX.

Ao aplicar essas regras, você reforça significativamente a segurança da sua instalação WordPress sem depender de plugins, mantendo o controle total do seu servidor.

Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Mais posts