1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

pagina pessol(sou iniciante) upload de ficheiros

Discussão em 'Web Development' iniciada por MCH2387, 20 de Janeiro de 2009. (Respostas: 13; Visualizações: 1217)

  1. MCH2387

    MCH2387 Power Member

    Boas

    tenho um projecto simples, quero ter uma página onde se pode fazer o upload de ficheiros para o meu servidor de SSH

    é possivel?

    anexo: tenho conhecimentos ao nivel do flash e o básico de HTML, PHP e SQL.
     
  2. tomassantos

    tomassantos To fold or to FOLD?

    Penso que seja com PHP-SQL.
     
  3. MCH2387

    MCH2387 Power Member

    preciso de pormenores...

    sou bastante iniciante, o SQL que usei foi apenas para mexer em tabelas, mais nada
     
  4. fil79

    fil79 Power Member

    Última edição pelo moderador: 20 de Janeiro de 2009
  5. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Podes até não usar uma base de dados, mas nesse caso terás de ter bastante cuidado, porque é catastroficamente fácil abrir buracos de segurança.
    Se não quiseres usar uma base de dados, o que precisas de fazer é um script que faça o upload (ver link fornecido pelo fil79), e os ficheiros são movidos para uma pasta privada abaixo do www, isto é, à qual uma pessoa não possa aceder directamente através do browser.
    Depois, precisas é de outro script para listar os ficheiros dessa pasta e permitir o download.
     
  6. MCH2387

    MCH2387 Power Member

    acho que já está, pelo menos funciona

    no ficheiro html:
    Código:
    <form enctype="multipart/form-data" method="post"
            action="carrega.php">
        <input type="hidden" name="MAX_FILE_SIZE" value="100000000">
        Ficheiro a enviar: <input name="fichutil" type="file"> <br>
        <p><input type="submit" value="Enviar ficheiro">
    </from>
        <p><b><h3>Lista</h3></b>
    
        <?php
        $lista = GetDirArray("soft");
        while (list ($par1, $par2) = each ($lista)){
            if ($par2 != "." && $par2 != ".." ){
                $pth = "soft/$par2";
                $tam = filesize($pth);
                $pth = str_replace(" ", "%20", $pth);
                echo "<p><a href = '$pth'>$par2</a> - ($tam octetos)\n";
            }
        }
        
        function GetDirArray($sPath)
        {
            $retVal = array();
            $listaDir=opendir($sPath);
            while ($fich = readdir($listaDir))
                $retVal[count($retVal)] = $fich;
            
            closedir($listaDir);
            sort($retVal);
            return $retVal;
        }
        ?>
    
    no php:
    Código:
    <?php
      
      $fu = $_FILES['fichutil'];
      $ficheiro="soft/" . $fu['name'];
      
      print "<p>Nome = " . $fu['name'];
      print "<p>Tamanho = " . $fu['size'];
      
      if (!preg_match("/\'/",$fu['name']) && is_uploaded_file($fu['tmp_name'])) {
          print "<p>Ficheiro carregado. Prima voltar para confirmar.";
          $fich = str_replace(" ", "+", $fu['name']);
          move_uploaded_file($fu['tmp_name'], $ficheiro);
      } else {
          echo "<p>Algo correu mal: ficheiro '" . $fu['name'] . "'.";
      }
      ?>
    

    há falta de segurança aqui???

    obrigado
     
    Última edição pelo moderador: 21 de Janeiro de 2009
  7. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Provavelmente há.
    Cria um ficheiro PHP chamado "teste.php" com o seguinte conteúdo:
    PHP:
    <?php echo "Falha detectada!<br>"phpinfo(); ?>
    depois envia-o usando esse sistema, e, considerando que tens o teu script em http://www.oteusite.com/pasta/upload.php, tenta abrir o http://www.oteusite.com/pasta/soft/teste.php.
     
  8. MCH2387

    MCH2387 Power Member

    ok ja fiz isso, e aparece uma página cheia de infos

    que posso interpretar daqui?

    obrigado
     
  9. geoblast

    geoblast Power Member

    Que tens uma falha de segurança. É possível colocar e executar scripts no teu servidor. Esse script do kayvlim é «inofensivo», apenas revela info do servidor. Mas com outros scripts é possivel expor a bd, aceder a áreas restritas, etc...

    Tens que precaver o tipo de ficheiros que podem ser colocados no servidor, precaver a sua execuação, etc..
     
  10. MCH2387

    MCH2387 Power Member

    estou a perceber onde queres chegar, tenho de ler mais sobre isso então.
    1-que tipos de ficheiros devo nao aceitar? só executáveis?
    2-alguem sabe como isso se faz? é no ficheiro php que envia os dados ou no que recebe?

    muito obrigado pela ajuda
     
  11. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Isso tudo depende muito do que queres fazer.
    Se estás a fazer um script para uma galeria, por exemplo, então possivelmente só precisarás de aceitar imagens (que em certas circunstâncias continuarão a permitir falhas de segurança, mas isso é uma história mais complicada).
    Se estás a fazer um alojamento de ficheiros, então tens de permitir tudo, incluindo scripts.

    A minha solução no meu site foi:
    * script upload.php mostra o formulário para o envio de ficheiros e trata do envio
    * os ficheiros são movidos para a pasta ../private/ficheiros
    * como medida auxiliar, também mudo os nomes dos ficheiros, de forma a evitar que existam dois ficheiros com o mesmo nome. Cada nome será único
    * depois, existe um script - download.php - que conecta à base de dados, verifica se o nome introduzido corresponde a um nome de ficheiro válido, e de seguida envia os headers para forçar o download e faz um readfile() do ficheiro

    Por exemplo, se eu chamar /download.php?ficheiro=abcdef, o ficheiro download.php liga-se à bd, verifica que o nome abcdef pertence ao ficheiro "teste.php", envia os headers necessários para que o browser grave o ficheiro com o nome "teste.php" e avalia a expressão
    PHP:
    readfile("../private/ficheiros/abcdef");
    .

    Desta forma, não é possível aceder directamente a um script, ainda que este seja enviado, portanto, a existirem falhas de segurança, em princípio não estarão aqui. De qualquer forma, o script upload.php está protegido por palavra-passe.

    Verifica se o teu alojamento só te dá o interior do www, ou se também te permite andares um nível para trás por FTP. Se te permitir, então podes fazer um script como eu disse para evitares falhas de segurança, criando uma pasta privada fora da pasta www. Senão, é mais seguro aceitares apenas ficheiros do tipo que queres especificamente aceitar (fazes uma whitelist).

    Vê estes links para informações auxiliares:
    http://www.w3schools.com/PHP/php_file_upload.asp
    http://www.scanit.be/uploads/php-file-upload.pdf (<- PDF)
     
    Última edição: 22 de Janeiro de 2009
  12. MCH2387

    MCH2387 Power Member

    vou explicar para quê isto tudo.
    quero criar uma página apenas com o local para upload de ficheiros para que me possam enviar ficheiros quando eu não estou na disponível na net.
    não é para os ficheiros ficarem lá, é para removelos logo que chegue a casa

    devo interpretar pela tua userbar que és do tectico, assim como eu, e estou a usar o sistema sigma para fazer isto, e visto não podermos usar e abusar daquilo... apenas quero fazer esta coisa simples. tanto é assim que estou a pensar remover a lista que aparece na página para que ng veja o que lá está.

    obrigado
     
  13. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Percebo o que queres fazer, e nunca usei o sigma para isso. No entanto, acho que o sigma te permite teres a tal pasta privada.

    O que te estou a dizer é também para ires ganhando boas práticas, porque uma falha destas num site em produção é muito, muito grave.

    Pensa também noutra coisa: há demasiados factores a teres em conta. Primeiro, o tamanho máximo dos ficheiros está limitado (o phpinfo que viste mostra isso tudo), e o tempo máximo que um script pode demorar também está. Assim, se alguém te enviar ficheiros muito grandes, leva com um erro, e se o ficheiro demorar demasiado tempo a chegar, idem.

    Geralmente, o limite é tão pequeno que é preferível enviarem-te esses ficheiros por e-mail. Não sei quais os limites do sigma, até porque não tenho o serviço www activado, mas acredito que não sejam altos. Consulta as variáveis upload_max_filesize e max_execution_time naquele ficheiro onde viste as informações todas do PHP.
     
  14. MCH2387

    MCH2387 Power Member

    no upload_max_filesize tem 10M
    no max_execution_time tem 10

    realmente é muito baixo o tamanho, não tinha noção disso, assim penso que isto so serviu para aprender alguma coisa... não será uma coisa a usar com frequência.

    muito obrigado
     

Partilhar esta Página