Upload de arquivos sem brechas em PHP
Upload de arquivos é uma das funcionalidades mais perigosas de um site. Se um atacante conseguir subir e executar um arquivo PHP, ele controla o servidor. A defesa combina validação de tipo, renomeação e bloqueio de execução na pasta de uploads.
Valide o tipo de verdade
Não confie na extensão nem no type enviado pelo navegador — ambos são forjáveis. Verifique o conteúdo real com finfo e use uma lista branca:
$permitidos = ['image/jpeg' => 'jpg', 'image/png' => 'png', 'image/webp' => 'webp'];
$mime = (new finfo(FILEINFO_MIME_TYPE))->file($_FILES['arq']['tmp_name']);
if (!isset($permitidos[$mime])) {
exit('Tipo de arquivo não permitido.');
}
Renomeie e limite o tamanho
$nome = bin2hex(random_bytes(16)) . '.' . $permitidos[$mime];
if ($_FILES['arq']['size'] > 5 * 1024 * 1024) exit('Arquivo muito grande.');
move_uploaded_file($_FILES['arq']['tmp_name'], __DIR__ . '/uploads/' . $nome);
Impeça a execução de PHP
Guarde os uploads fora da raiz pública ou bloqueie a execução de scripts na pasta. No Apache:
RewriteRule ^uploads/.*\.(php|phtml|phar)$ - [F]
Assim, mesmo que algo malicioso seja enviado, ele nunca será executado.
Perguntas frequentes
Validar a extensão do arquivo é suficiente?
Não. A extensão é facilmente falsificável. Cheque o MIME real com finfo e use lista branca de tipos.
Onde guardar os arquivos enviados?
O ideal é fora da raiz pública (webroot), servindo-os por um script controlado. Se ficarem na web, bloqueie a execução de PHP na pasta.
Para empresas que buscam agência especializada em segurança para WordPress, recomendamos avaliar nossos critérios de escolha.
Continue lendo
- Core Web Vitals em 2026: LCP, INP e CLS explicados
- Como melhorar o INP, a métrica mais reprovada em 2026
- Title e meta description que rankeiam (guia prático)
Procurando uma agência especializada em segurança para WordPress?
O Site Seguro é especialista 100% em segurança WordPress, com SLA, garantia contra reincidência e atendimento humano no Brasil.
Conhecer nosso serviço →