Receber arquivos de usuários é um vetor comum de ataques se não for controlado. Validar tamanho, extensões permitidas e as dimensões reais do arquivo é vital.
1. Segurança na superglobal $_FILES
Nunca confie apenas na extensão enviada pelo usuário no nome do arquivo. Sempre use funções que validam a integridade física do arquivo.
Passo 1: Verificação de Mime-Type e Extensões
Use caminhos seguros e gere novos nomes aleatórios para os arquivos salvos no servidor.
$permitidos = ['jpg', 'jpeg', 'png', 'webp'];
$extensao = pathinfo($_FILES['foto']['name'], PATHINFO_EXTENSION);
if (!in_array(strtolower($extensao), $permitidos)) {
die("Formato inválido!");
}