P3rukao 0 Denunciar post Postado Março 8, 2009 Olá "povu foreiro", Eu já vi esse assunto de validar o mime-type dos arquivos circular muito por aí... mas eu continuo com duvidas quanto a isso!!! Eu já entendi a parte de que pra verificar o mime, basta checar se o "TYPE" do arquivo, corresponde com aquele que você quer limitar para o seu form de upload, para isso basta verificar numa tabela, os mime types existentes!!! Porém, como segurança eh fundamental quando o assunto eh "transporte de dados", eu tentei fazer umas brincadeiras aqui com os arquivos a serem enviados... e vi... que não basta apenas verificar o mime desses arquivos... Eu alterei a extensão de um arquivo .txt por exemplo, para o de um .mp3 e enviei-o pelo meu form. Para minha surpresa, o arquivo passou, e isso aconteceu com todos os outros arquivos que testei em seguida. Somente aqueles que tinham a extensão diferente da que foi permitida foram barrados (os arquivos com .txt de verdade). Daí eu pergunto: » Como fazer para validar totalmente um arquivo, antes de fazer o upload do mesmo??? » Estou tentando com um arquivo de audio (audio/mpeg). Como faço para validá-lo, para evidar os "dedos-nervosos" dos outros aí?? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Março 8, 2009 Atenção hein?! Validar mime-type é diferente de validar a extensão. Como você fez? http://br2.php.net/manual/en/ref.fileinfo.php http://br2.php.net/mime-content-type Compartilhar este post Link para o post Compartilhar em outros sites
P3rukao 0 Denunciar post Postado Março 8, 2009 E usei disso Willian, eu não estou validando extensão naum... Estou pegando o TYPE do arquivo que enviei pelo form, e fazendo a verificação com o que eu quero... $arquivo = $_FILES['arquivo']; $mime = "audio/mpeg"; if($arquivo['type'] != $mime ) {echo "extensão errada... e etc e talz...";} Essa parte está funcionando beleza... se eu tentar enviar um arquivo .txt, ele barra, não deixa passar.... Porém, se eu pegar esse mesmo .txt e alterar a sua extensão para .mp3, ele deixa passar... Eu vi ontem mesmo aqui no fórum, um tópico que falava disso... e lah dizia que não serve apenas verificar o mime, por que se eu alterar a extensão propositalmente, essa verificação falha... Daí eu teria que usar, por exemplo, uma função específica daquele tipo de arquivo. Nesse post o cara mostrou que se eu usasse um getimagesize(), para detectar o tamanho da imagem, se o cara tivesse mandado um .txt alterado, ele não passaria como no caso anterior, pois a função iria retornar um erro por conta do arquivo estar em formato errado!!! » Mas no meu caso... eu preciso mesmo eh validar um arquivo de audio... (mp3)... Mas abri esse tópico afim de tentar definir para o máximo possivel dos tipos de arquivos.... como fazer a sua validação completa, pra naum deixar nenhum "dedo-nervoso" furar a segurança do nosso form!!! O máximo de opiniões que puderem dar, melhor, assim agente consegue encerrar esse assunto de uma vez!!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Março 8, 2009 O ideal é validar a mime type E a extensão do arquivo. ;) Compartilhar este post Link para o post Compartilhar em outros sites
P3rukao 0 Denunciar post Postado Março 8, 2009 Mas de que exatamente vale validar a extensão do arquivo???? "Só pra mim naum passar batido nessa"... validar a extensão que você diz, eh pegar o nome do arquivo e verificar os caracteres no final da string do mesmo???? Ou validar a extensão, que você diz eh de outro jeito??? Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Março 8, 2009 Extensão são os caracteres depois do último ponto no final do nome arquivo... Exemplos: txt, mp3, wav, php, htm, html, rar e etc. ;) Compartilhar este post Link para o post Compartilhar em outros sites
P3rukao 0 Denunciar post Postado Março 8, 2009 Bom... foi meio que isso que eu disse antes... soh que do jeito que você falou, deu a intender que havia outro significado para extensão... Ô.õ MAs de qqr forma... de que que vale verificar os caracteres finais do arquivo... soh o mime bastaria pra isso... Por exemplo... se eu envio um arquivo .txt e o meu form soh aceita .mp3, ele vai barrar tanto validando por extensão, como por mime... e se eu trocar a extensão do arquivo manualmente (do .txt para o .mp3), ele vai passar normalmente... EM AMBOS!!!! A questão eh fazer a segunda validação.... O QUÊ VALIDAR???? COMO VALIDAR??? » entenderam onde quero chegar??? Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Março 8, 2009 não precisa validar a extensão a nomenclatura do arquivo não incluencia em nada se renomear o aruqivo cujo content-type seja plain/text, de .txt para .mp3, o arquivo continuará sendo um arquivo de texto. pode renomear pra .exe, .qualquercoisa, que continuará sendo um arquivo de texto. Compartilhar este post Link para o post Compartilhar em outros sites
P3rukao 0 Denunciar post Postado Março 8, 2009 Exato... e ... agora nós voltamos ao início do assunto do tópico!!! » Como fazer a validação completa do arquivo???? « Por que, somente checar o mime num tá funcionando, e nem eh seguro, deixar somente nessa validação!! õ.Ô Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Março 8, 2009 Bom... Eu recomendo que você faça o seguinte: Primeiro, valide o mime type do arquivo para ter certeza que ele não foi renomeado/alterado pelo visitante. SE você for manter o nome original do arquivo enviado, valide a extensão do arquivo enviado. Caso a extensão do arquivo enviado não tenha passado no teste, mas o mime type sim, renomeie o arquivo quando for salvá-lo no servidor. Mantendo assim o arquivo com a extensão certa e o tipo (mime type) correto. Se a extensão passar e o mime type for inválido, peça para o visitante reenviar o arquivo. -- O que realmente diz se o que o visitante está enviando é um arquivo de música, é o mime type... Mas se você for manter o nome do arquivo enviado, você tambem precisa validar a extensão (.mp3) do arquivo. Exemplo: O mime type é o seu DNA, ele diz se você é homem ou mulher. Mas você pode ser homem e usar um nome de mulher. Se eu não for te chamar por um apelido, eu preciso que você tenha um nome de homem também pra condizer com o seu DNA e não dar confusão pra ninguém. =) É isso http://forum.imasters.com.br/public/style_emoticons/default/bye1.gif Compartilhar este post Link para o post Compartilhar em outros sites
P3rukao 0 Denunciar post Postado Março 8, 2009 hehehe... gostei do exemplo ~, mas no meu caso, eu estou mudando o nome do arquivo, colocando um apelido no caso... xD Pra ficar mais claro de como estou fazendo... óh o codigo: <? include ("../_incs/server_admin.php"); include ("../../_incs/funcoes.php"); $arquivo = isset($_FILES["midia"]) ? $_FILES["midia"] : FALSE;// Prepara a variável caso o formulário tenha sido postado $config = array(); $config["tamanho"] = 10485760; // Tamano máximo da midia, em bytes = 10MB $redirectPage = $serverAdmin."sistema_radio/cadRadio.php"; $config["diretorio"] = "midia/";// Diretório onde a midia será salva //$mime = array('audio/mp3','audio/mpeg','audio/mpeg3','audio/mpg'); $mime = "audio/mpeg"; // Gera um nome para a midia e verifica se já não existe, caso exista, gera outro nome e assim sucessivamente.. // Função Recursiva function nome($extensao) { global $config; // Gera um nome único para a midia $temp = substr(md5(uniqid(time())), 0, 10); $midia_nome = $novo_nome . $temp . "." . $extensao; // Verifica se o arquivo já existe, caso positivo, chama essa função novamente if(file_exists($config["diretorio"] . $midia_nome)) { $midia_nome = nome($extensao); } return $midia_nome; } if($arquivo) { $erro = true; // Verifica o mime-type do arquivo para ver se é de midia. // Caso fosse verificar a extensão do nome de arquivo, o código deveria ser: //if(!eregi("^audio\/(mp3|mpeg|mpeg3|mpg)$", $arquivo["type"])) if($arquivo["type"] != $mime) { //$erro[] = "Arquivo em formato inválido! A midia deve ser em formato mp3. Envie outro arquivo"; $erro = false; Redirecionar_URL($redirectPage."?erro=1"); } else { // Verifica tamanho do arquivo if($arquivo["size"] > $config["tamanho"]) { //$erro[] = "Arquivo em tamanho muito grande! A midia deve ser de no máximo " . $config["tamanho"] . " bytes. Envie outro arquivo"; $erro = false; Redirecionar_URL($redirectPage."?erro=2"); } } if($erro == true) { // Pega extensão do arquivo, o indice 1 do array conterá a extensão preg_match("/\.(mp3|mpeg|mpeg3|mpg){1}$/i", $arquivo["name"], $ext); // Gera nome único para a midia $midia_nome = nome($ext[1]); // Caminho de onde a midia ficará $midia_dir = $config["diretorio"] . $midia_nome; // Faz o upload da midia move_uploaded_file($arquivo["tmp_name"], $midia_dir); include("recebeCadRadio.php"); } elseif ($erro == false) { Redirecionar_URL($redirectPage."?erro=0"); } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Março 8, 2009 Reparei essa linha na função nome() você usa: $midia_nome = $novo_nome . $temp . "." . $extensao; Essa variavel $novo_nome, ela não existe ou ela vem de fora da função? Se vem de fora você precisa usar o global como usou pra $config... Dá uma olhada nisso. @Edit Se você está procurando sobre os mimetypes de cada extensão, dá uma olhada: http://www.webmaster-toolkit.com/mime-types.shtml http://web.duke.edu/websrv/file-extensions.html Compartilhar este post Link para o post Compartilhar em outros sites
P3rukao 0 Denunciar post Postado Março 9, 2009 viiigi... eu esqueci de tira-la daí... eh que estava tentando por um nome personalizado antes do nome randomizado que ela gera... mas nem tava pegando... num sei porque ¬¬ Eu dei uma olhada no links... parece que está mais completa do que a que eu mostrei no inicio do topico.... Mas o que eu queria, naum eh saber sobre os tipos de mime-types exatamente, ..., pelo menos de início, eu queria saber fazer essa segunda validação... pra deixar o meu script mais supimpa.... pq, o prazo já tá acabando pra mim entregar isso, e.. tow vendo que vou ter que entregar com essas brechas e alterar depois.... Por isso, quanto antes eu souber, menos dor de cabeça eu vou ter.... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Março 9, 2009 Fiz um exemplo de validação da extensão e do mime type... Claro que você precisa adaptar isso ao seu script: <?php // Adicione aqui as extensões permitidas (digite todos em caixa baixa) $extensoes_ok = array('mp3', 'wma'); // Adicione aqui os mime types perimitios (digite todos em caixa baixa) $mimetypes_ok = array('audio/mpeg3', 'audio/x-mpeg-3'); // Defina duas variaveis com informações do upload $arquivo = 'meuarquivo.mp3'; $mimetype = 'audio/mpeg3'; $extensao = strtolower(end(explode('.', $arquivo))); $mimetype = strtolower($mimetype); if ((array_search($extensao, $extensoes_ok) !== FALSE) AND (array_search($mimetype, $mimetypes_ok) !== FALSE)) { echo "ok"; } else { echo "erro"; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
P3rukao 0 Denunciar post Postado Março 9, 2009 ~, eu testei o teu script aqui... num form simples mesmo, com um inputFile enviando o arquivo mesmo... e uma outra página recebendo... alterei o $arquivo, e pus as mensagens de erro ou sucesso... mas ele sóh tá entrando no else... num inporta o tipo do arquivo... Tentei uma reca aqui e nem o mp3 nem o doc,txt,pdf, ..., nenhum da o OK!!! » õ.Ô « Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Março 9, 2009 Alterou o $mimetype = 'audio/mpeg3'; também? Compartilhar este post Link para o post Compartilhar em outros sites
P3rukao 0 Denunciar post Postado Março 9, 2009 sim... eu testei do jeito que tava... e depois coloquei $mimetype = 'audio/mpeg';.... nenhum dos dois pegou!!!! =/ você testou esse script aí??? Tá funcionando??? Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Março 9, 2009 Erro meu! Correção nessa linha: $extensao = strtolower(end(explode('.', $arquivo))); Compartilhar este post Link para o post Compartilhar em outros sites
P3rukao 0 Denunciar post Postado Março 9, 2009 vaaaalha... num mudou nada aki naum... õÔ Chequei a sintaxe... e o que você modificou... mas tah do mermo jeito.. =/ Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Março 9, 2009 Alguém tá com os erros do PHP desativados.. :P A ordem dos argumentos no array_search() tava trocada. Pega o código atualizado, testado, e funcionando ali em cima. Abraços http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites