tony_lu 1 Denunciar post Postado Setembro 30, 2015 Ola pessoal estou criando um sistema de upload de apenas arquivos em PDF. Como se trata de um sistema de usuarios, para que usuarios cadastrados no site possam enviar arquivos, gostaria deste recurso com total segurança, e gostaria de saber se a forma que estou fazendo upload tem alguma vulnerabilidade: // Upload de PDF $pathToSave = "../pdf/"; if( $_FILES ) { // Verificando se existe o envio de arquivos. if( $_FILES['pdf'] ) { // Verifica se o campo não está vazio. $dir = $pathToSave; // Diretório que vai receber o arquivo. $tmpName = $_FILES['pdf']['tmp_name']; // Recebe o arquivo temporário. $name = $_FILES['pdf']['name']; // Recebe o nome do arquivo. preg_match_all('/\.[a-zA-Z0-9]+/', $name , $extensao); if(!in_array(strtolower(current(end($extensao))), array('.pdf', '.PDF', '.Pdf'))) { $msg = 'Permitido apenas arquivos PDF'; } // move_uploaded_file( $arqTemporário, $nomeDoArquivo ) if( move_uploaded_file( $tmpName, $dir . $name ) ) { // move_uploaded_file irá realizar o envio do arquivo. $erro = 0; } else { $erro = 1; } } } Podem me passar dicas de como melhorar a segurança deste Upload? Lembrando que pode ser enviado apenas arquivos em PDF. Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Setembro 30, 2015 Tony, estou com um pouco de pressa, por isso não posso elaborar melhor a resposta, mas sugiro que dê uma atenção nos seguintes tópicos: 1 - Se o nome final do arquivo não for importante, renomeie-o para algum valor aleatorio. Se for, retire acentuação, caracteres especiais e principalmente: valide-o. 2 - Verifique o tipo de arquivo. E com isso não estou me referindo à extensão, que é algo que você já está verificando. Link externo 3 - Verifique o tamanho do arquivo (isso não é tão importante, mas é interessante). 4 - Cuide com as permissões de pasta e de arquivos (chmod). Dê uma lida a respeito. Obs: existe um jeito mais simples e sem utilizar expressões regulares para extrair a extensão do arquivo: $extensao = end( explode( '.', $arquivo ) ); É interessante você conhecer também: http://php.net/manual/en/class.splfileinfo.php Abraços e boa sorte. Compartilhar este post Link para o post Compartilhar em outros sites