Aprenda a fazer upload de arquivos no PHP com segurança

Veja como permitir que usuários façam upload de arquivos em PHP com validações de segurança para evitar ataques.

Como lidar com uploads de arquivos no PHP?

O upload de arquivos em PHP permite que usuários enviem imagens, documentos e outros arquivos para o servidor. No entanto, é fundamental validar e tratar esses arquivos para evitar problemas de segurança.

Criando um formulário para upload

Para permitir o envio de arquivos, criamos um formulário HTML com o atributo enctype="multipart/form-data":

<form action="upload.php" method="POST" enctype="multipart/form-data">
    <label for="arquivo">Escolha um arquivo:</label>
    <input type="file" name="arquivo" id="arquivo">
    <button type="submit">Enviar</button>
</form>

Aqui, o campo input type="file" permite a seleção de arquivos para envio.

Processando o upload com PHP

No arquivo upload.php, tratamos o envio do arquivo:

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (isset($_FILES["arquivo"])) {
        $arquivo = $_FILES["arquivo"];

        // Definindo diretório de destino
        $diretorio = "uploads/";
        $caminhoArquivo = $diretorio . basename($arquivo["name"]);

        // Verificando tamanho do arquivo
        if ($arquivo["size"] > 2000000) {
            echo "Erro: O arquivo é muito grande!";
            exit;
        }

        // Permitindo apenas certos tipos de arquivos
        $tiposPermitidos = ["image/jpeg", "image/png", "application/pdf"];
        if (!in_array($arquivo["type"], $tiposPermitidos)) {
            echo "Erro: Tipo de arquivo não permitido!";
            exit;
        }

        // Movendo o arquivo para o diretório final
        if (move_uploaded_file($arquivo["tmp_name"], $caminhoArquivo)) {
            echo "Upload realizado com sucesso!";
        } else {
            echo "Erro ao enviar o arquivo.";
        }
    }
}
?>

Esse código:

  1. Verifica se um arquivo foi enviado.
  2. Define um diretório seguro para armazenamento.
  3. Impõe um limite de tamanho de 2MB.
  4. Restringe os tipos de arquivos permitidos (JPEG, PNG, PDF).
  5. Move o arquivo para o diretório uploads/ caso passe nas validações.

Criando o diretório de destino

Antes de realizar o upload, garanta que o diretório uploads/ existe e tem permissões corretas:

mkdir uploads
chmod 755 uploads

Isso assegura que o PHP pode escrever no diretório de destino.

O upload de arquivos no PHP é amplamente utilizado em sites que permitem envio de imagens de perfil, documentos e anexos. Para evitar riscos, é essencial validar tipos de arquivos, limitar tamanhos e armazenar os arquivos em diretórios seguros. Sem essas medidas, o sistema pode ser vulnerável a ataques, como execução de scripts maliciosos no servidor.

Algumas aplicações:

  • Envio de imagens de perfil em sistemas de usuários
  • Upload de documentos em sistemas administrativos
  • Armazenamento de arquivos para downloads seguros
  • Envio de anexos em formulários de contato

Dicas para quem está começando

  • Sempre limite os tipos de arquivos permitidos para evitar uploads de scripts maliciosos.
  • Defina um tamanho máximo para arquivos para evitar sobrecarga no servidor.
  • Utilize um diretório específico para armazenar arquivos enviados.
  • Evite salvar arquivos com nomes fornecidos pelo usuário sem sanitizá-los.
  • Teste o processo de upload em diferentes cenários antes de implementá-lo em produção.

Contribuições de Rafael Nogueira

Compartilhe este tutorial: Como lidar com uploads de arquivos no PHP?

Compartilhe este tutorial

Continue aprendendo:

Como limpar dados do usuário no PHP?

Veja como limpar e validar dados recebidos de usuários em PHP para evitar vulnerabilidades como XSS e SQL Injection.

Tutorial anterior

Como definir um limite de tamanho para upload de arquivos?

Veja como definir e controlar o tamanho máximo de arquivos enviados por usuários no PHP para garantir segurança e desempenho.

Próximo tutorial