_SDinfo 3 Denunciar post Postado Maio 31, 2012 Galera, o código abaixo funciona bem. Mas além de saber se o arquivo é aceito ou não, gostaria de saber se "ele é o que diz ser", ou seja, o usuário poderia muito bem jogar um exe no servidor falando que é um txt ("falsificar" a extensão). Como fazer está validação? <?php $arquivo = "./bsd.jpg"; $mime_types = array( 'txt' => 'text/plain', 'htm' => 'text/html', 'html' => 'text/html', 'php' => 'text/html', 'css' => 'text/css', 'js' => 'application/javascript', 'json' => 'application/json', 'xml' => 'application/xml', 'swf' => 'application/x-shockwave-flash', 'flv' => 'video/x-flv', // images 'png' => 'image/png', 'jpe' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'jpg' => 'image/jpeg', 'gif' => 'image/gif', 'bmp' => 'image/bmp', 'ico' => 'image/vnd.microsoft.icon', 'tiff' => 'image/tiff', 'tif' => 'image/tiff', 'svg' => 'image/svg+xml', 'svgz' => 'image/svg+xml', // archives 'zip' => 'application/zip', 'rar' => 'application/x-rar-compressed', 'exe' => 'application/x-msdownload', 'msi' => 'application/x-msdownload', 'cab' => 'application/vnd.ms-cab-compressed', // audio/video 'mp3' => 'audio/mpeg', 'qt' => 'video/quicktime', 'mov' => 'video/quicktime', // adobe 'pdf' => 'application/pdf', 'psd' => 'image/vnd.adobe.photoshop', 'ai' => 'application/postscript', 'eps' => 'application/postscript', 'ps' => 'application/postscript', // ms office 'doc' => 'application/msword', 'rtf' => 'application/rtf', 'xls' => 'application/vnd.ms-excel', 'ppt' => 'application/vnd.ms-powerpoint', // open office 'odt' => 'application/vnd.oasis.opendocument.text', 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', ); $ext = pathinfo($arquivo,PATHINFO_EXTENSION); if(array_key_exists($ext, $mime_types)){ echo "Extensão aceita<br />"; echo $ext; } else { echo "Extensão não aceita"; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Maio 31, 2012 através das funções fileinfo Exemplo retirado, e adaptado, do manual do PHP: //cria o resource para obter mime type $fileInfo = finfo_open(FILEINFO_MIME_TYPE); //imprime o mime type echo finfo_file($fileInfo, $nomeArquivo) . "\n"; //fecha o resouce finfo_close($fileInfo); Compartilhar este post Link para o post Compartilhar em outros sites
_SDinfo 3 Denunciar post Postado Maio 31, 2012 através das funções fileinfo Exemplo retirado, e adaptado, do manual do PHP: //cria o resource para obter mime type $fileInfo = finfo_open(FILEINFO_MIME_TYPE); //imprime o mime type echo finfo_file($fileInfo, $nomeArquivo) . "\n"; //fecha o resouce finfo_close($fileInfo); Existe outra forma que não seja com finfo? Compartilhar este post Link para o post Compartilhar em outros sites
InterPlanet 7 Denunciar post Postado Maio 31, 2012 Opa! Olha uma funcao com duas opções para identificar o mime: <?php Function Arquivo_Mime($Arquivo_URL = '') { If (function_exists('mime_content_type')) { $RT = mime_content_type($Arquivo_URL); } Else If (function_exists('finfo_file')) { $Info = finfo_open(FILEINFO_MIME_TYPE); $RT = finfo_file($Info, $Arquivo_URL); } Else { $RT = ''; } Return $RT; } ?> No caso de não ter a classe finfo. Agora, só comparar o mime da extensao com o retorno da funcao. Abraço. Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Maio 31, 2012 No manual do PHP: mime_content_type — Detect MIME Content-type for a file (deprecated) Não deve-se mais utilizar essa função. Sobra-se apenas fileinfo. Por isso nem falei sobre ela. Compartilhar este post Link para o post Compartilhar em outros sites
InterPlanet 7 Denunciar post Postado Maio 31, 2012 Beleza, uso versoes antigas do php ainda, por isso sugeri pois podia funfar pra ti. Rapaz, agora pra detectar o mime sem finfo so usando uma classe, tem uma aqui no iMasters, deixa ver se acho... Aqui o: Class Mime Magic É do João Batista Neto ;) Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Maio 31, 2012 Funcionar vai (por um certo tempo ainda). Mas é o mesmo que montar a estrutura de um site com tabelas. Também funciona, mas não deve ser feito. Entendeu? Compartilhar este post Link para o post Compartilhar em outros sites
_SDinfo 3 Denunciar post Postado Maio 31, 2012 Funcionar vai (por um certo tempo ainda). Mas é o mesmo que montar a estrutura de um site com tabelas. Também funciona, mas não deve ser feito. Entendeu? Valeu galera. Então vamos partir para "finfo" mesmo. Alguém ai poderia me ajudar a utilizar este recurso no ambiente Linux? É preciso fazer a instalação deste? Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Maio 31, 2012 This extension is enabled by default as of PHP 5.3.0. Before this time, fileinfo was a PECL extension but is no longer maintained there. However, versions prior to 5.3+ may use the » discontinued PECL extension. Se o seu php for > 5.3.0, já é padrão. Se não, entre neste link Agora vi que há a possibilidade de utilizar a SPL para isso: SplFileInfo Compartilhar este post Link para o post Compartilhar em outros sites
InterPlanet 7 Denunciar post Postado Maio 31, 2012 Cara, por padrao, voce deve apenas instalar a extensao no php, o que consiste basicamente em: - baixar a extensao - envia-la para a pasta de extensoes do php - alterar o php.ini para adicionar o carregamento da extensao O processo em si é bem simples, mas atente que você precisa: - uma versão do php que suporte File Info; - acesso as configurações do PHP no servidor, este se não tiver, terp´ade pedir ao suporte do seu host Infomações aqui: File Info Compartilhar este post Link para o post Compartilhar em outros sites
_SDinfo 3 Denunciar post Postado Maio 31, 2012 Se o seu php for > 5.3.0, já é padrão. Se não, entre neste link Agora vi que há a possibilidade de utilizar a SPL para isso: SplFileInfo Estava vendo aqui. PHP 5.3.3 se não me engano. Mas quando a utilizo a tela fica em branco. Acredito que tenho que ativar a extensão. Onde faria isso? Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Maio 31, 2012 Antes de tirar conclusões precipitadas, devemos saber qual é o erro. "Supor" é muito abrangente. Utilize esse código na primeira linha do seu script: ini_set( 'display_errors', true ); error_reporting( E_ALL ); Execute novamente, e veja qual erro que aparece. Compartilhar este post Link para o post Compartilhar em outros sites
_SDinfo 3 Denunciar post Postado Maio 31, 2012 Antes de tirar conclusões precipitadas, devemos saber qual é o erro. "Supor" é muito abrangente. Utilize esse código na primeira linha do seu script: ini_set( 'display_errors', true ); error_reporting( E_ALL ); Execute novamente, e veja qual erro que aparece. Cara muito obrigado. Coloquei o código que você falou e pude observar que era questão de permissão. Continuando: <?php $arquivo = "./bsd.png"; $mime_types = array( 'txt' => 'text/plain', 'htm' => 'text/html', 'html' => 'text/html', 'php' => 'text/html', 'css' => 'text/css', 'js' => 'application/javascript', 'json' => 'application/json', 'xml' => 'application/xml', 'swf' => 'application/x-shockwave-flash', 'flv' => 'video/x-flv', // images 'png' => 'image/png', 'jpe' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'jpg' => 'image/jpeg', 'gif' => 'image/gif', 'bmp' => 'image/bmp', 'ico' => 'image/vnd.microsoft.icon', 'tiff' => 'image/tiff', 'tif' => 'image/tiff', 'svg' => 'image/svg+xml', 'svgz' => 'image/svg+xml', // archives 'tar' => 'application/x-gtar', '7z' => 'application/x-7z-compressed', 'bzip' => 'application/x-bzip', 'bzip2' => 'application/x-bzip2', 'rar' => 'application/x-rar-compressed', 'zip' => 'application/zip', 'rar' => 'application/x-rar-compressed', 'exe' => 'application/x-msdownload', 'msi' => 'application/x-msdownload', 'cab' => 'application/vnd.ms-cab-compressed', // audio/video 'mp3' => 'audio/mpeg', 'qt' => 'video/quicktime', 'mov' => 'video/quicktime', 'mpeg4' => 'application/mp4', 'avi' => 'video/x-msvideo', // adobe 'pdf' => 'application/pdf', 'psd' => 'image/vnd.adobe.photoshop', 'ai' => 'application/postscript', 'eps' => 'application/postscript', 'ps' => 'application/postscript', // ms office 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'doc' => 'application/msword', 'rtf' => 'application/rtf', 'xls' => 'application/vnd.ms-excel', 'ppt' => 'application/vnd.ms-powerpoint', // open office 'odt' => 'application/vnd.oasis.opendocument.text', 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', ); $fileInfo = finfo_open(FILEINFO_MIME_TYPE); echo $teste = finfo_file($fileInfo, $arquivo) . "\n"; finfo_close($fileInfo); ?> Como fazer neste caso para retornar a extensão associada ao mime type? Por exemplo exibir para o usuário a mensagem: Seu arquivo é do tipo: png ? Compartilhar este post Link para o post Compartilhar em outros sites