Voltar para blog

Blindagem de WordPress: Como Alterar e Proteger o Diretório de Uploads

08/03/2026 · 4 min · Cibersegurança

Compartilhar

🛡️ Blindagem de WordPress: Como Alterar e Proteger o Diretório de Uploads

O diretório padrão de uploads do WordPress (/wp-content/uploads/) é um dos alvos primários em ataques automatizados. Bots de varredura procuram por arquivos de configuração esquecidos, backups de plugins ou vulnerabilidades de execução de scripts (RCE) em caminhos fixos.

Neste guia técnico, demonstro a estratégia que apliquei para mover esse diretório para um local personalizado e adicionar camadas extras de segurança no nível do servidor (Apache/Nginx), impedindo execução de código malicioso mesmo quando há upload indevido.

A ideia aqui é bem objetiva: reduzir previsibilidade para bots, preservar integridade do ambiente e manter disponibilidade com baixo impacto de operação.

---

1. Planejamento e preparação da infraestrutura

Antes de qualquer alteração no código, é obrigatório preparar o ambiente no sistema de arquivos do servidor.

📁 Criando o novo diretório

Acesse o servidor via SSH ou FTP e crie a nova pasta. Por segurança, prefira um nome que não contenha "uploads" ou "media".

mkdir -p /public_html/storage_core/data/

🔑 Ajuste de permissões (Linux)

O usuário que executa o webserver (www-data, apache ou o usuário da conta no cPanel) precisa de permissão de escrita.

chmod 755 /public_html/storage_core/data/

Se necessário, ajuste ownership:

chown -R accountuser:accountuser /public_html/storage_core/data/

---

2. Configuração no core do WordPress

A alteração do diretório de uploads é feita via constante no wp-config.php.

  1. Abra o arquivo wp-config.php na raiz do site.
  2. Adicione a linha abaixo antes do comentário:

/ That's all, stop editing! Happy publishing. /

// Define o novo caminho de uploads relativo à raiz da instalação
define('UPLOADS', 'storage_core/data');
Nota técnica: a constante UPLOADS deve ser relativa ao ABSPATH, sem barra inicial.

Depois de salvar, valide com um upload de teste no painel de mídia para confirmar escrita no novo caminho.

---

3. Migração de dados e integridade do banco

🚚 Movendo os arquivos existentes

Se o site já possui imagens, mova o conteúdo legado:

rsync -avh --progress /public_html/wp-content/uploads/ /public_html/storage_core/data/

🗄️ Search and replace (ajuste de URLs)

Esse é o ponto que mais gera incidente pós-migração: as URLs antigas ficam gravadas no banco (wp_posts e wp_postmeta).

Com WP-CLI:

wp search-replace 'wp-content/uploads/' 'storage_core/data/' --all-tables --precise --report-changed-only

Com SQL manual (quando necessário):

UPDATE wp_posts
SET post_content = REPLACE(post_content, 'wp-content/uploads/', 'storage_core/data/');

UPDATE wp_postmeta
SET meta_value = REPLACE(meta_value, 'wp-content/uploads/', 'storage_core/data/');
Prática de produção: sempre execute backup completo antes do search-replace.

---

4. Hardening de servidor: bloqueando execução de scripts

Mover pasta aumenta obscuridade, mas não impede execução de .php se um arquivo malicioso for carregado.

Apache (.htaccess no novo diretório)

Crie /.public_html/storage_core/data/.htaccess:

# Impede execução de scripts PHP no diretório de mídia
<Files *.php>
    deny from all
</Files>

Nginx (server block)

location /storage_core/data/ {
    location ~ \.php$ {
        deny all;
    }
}

Se você usa stack híbrida (Nginx como proxy + Apache backend), aplique regra nos dois lados para evitar bypass por rota interna.

---

5. Validação operacional pós-hardening

Depois da migração e das regras, eu valido com checklist técnico curto:

  1. Upload novo via painel (/wp-admin/upload.php) vai para o novo diretório.
  2. Imagens antigas continuam abrindo em posts já publicados.
  3. Tentativa de executar script retorna bloqueio.

Teste com curl:

curl -I https://domain.tld/storage_core/data/test-image.webp
curl -I https://domain.tld/storage_core/data/probe.php

Resultado esperado:

Também valido logs de erro para garantir que não houve quebra silenciosa de plugin de galeria/CDN.

---

6. Erros comuns que eu já peguei em campo

Erro A: novas imagens não sobem

Causa provável:

Correção:

  1. Revalidar chmod/chown.
  2. Conferir open_basedir no php.ini ou pool FPM.

Erro B: imagens antigas quebradas após migração

Causa provável:

Correção:

  1. Reexecutar search-replace com relatório.
  2. Limpar cache de aplicação e CDN.

Erro C: acesso direto ao IP mostra uploads sem proteção

Causa provável:

Correção:

  1. Garantir bloqueio no servidor web (Apache/Nginx).
  2. Se usar proxy reverso, restringir acesso de origem aos IPs confiáveis.

---

🏁 Conclusão estratégica

Ao alterar o diretório padrão e aplicar bloqueios de execução, você tira o seu WordPress do radar da maior parte das varreduras genéricas e reduz impacto de payloads automatizados em upload.

Checklist final:

Esse é o tipo de disciplina operacional que separa ambiente improvisado de infraestrutura profissional e resiliente.

CC BY-NC

Este post está licenciado sob CC BY-NC.

Comentários

Participe da discussão abaixo.