Ir para conteúdo
onedev

Filtrar Upload de arquivos apenas para imagens

Recommended Posts

Olá Pessoal,

qual a forma mais segura de filtrar um upload asp de arquivos para somente imagens?

Tentei reconhecer a extensão do arquivo e limitar apenas upload de arquivo .gif/.jpg e também filtrar pelo tipo de arquivo. Porém algum mal intencionado pode simplesmente renomear um arquivo malicioso para .gif, fazer o upload e depois acessar o arquivo para executa-lo. Alguém conhece ou recomenda algum filtro eficiente?

Utilize os seguintes recursos:
For Each File in Upload.Files 
   If File.ContentType <> "image/gif" Then 
      Resposta = "Arquivo enviado nao e um formato valido de imagem." 
      File.Delete 
   End If 
Next

 

For Each File in Upload.Files 
   If UCase(Right(File.Path, 3)) <> "gif" Then 
      Resposta = "Arquivo enviado nao e um formato valido de imagem." 
      File.Delete 
   End If 
Next
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Após muita pesquisa cheguei a conclusão de que não é possível limitar o upload de arquivos pelo tipo. Pois ao alterar a extensão do arquivo de .php para .gif por exemplo o filtro não irá barrar. 

Como solução para evitar vulnerabilidades, o ideal é se certificar de dar apenas permissão de leitura e escrita na pasta que receberá os arquivos do upload e nunca liberar permissão de execução. Pois assim mesmo que um arquivo malicioso seja enviado, ele não poderar ser executado. Instruções aqui: https://wiki.locaweb.com.br/pt-br/Permissão_de_arquivos_–_Como_se_proteger_da_execução_de_scripts_indesejados

 

Além disso a instalação de uma ferramenta como o Eset File Security no servidor, é essencial para varrer arquivos maliciosos.
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Eddy Fernandes
      Olá galera,
       
      Estou desenvolvendo uma página com um form disparado para um link externo, mas antes preciso salvar os dados em um banco de dados. Não manjo muito de Javascript, então sou grato pela ajuda de quem puder ajudar. O código está assim:
       
      Página do form:
      <form action="URL-pra-onde-vao-os-dados-do-form" method="post" onSubmit="javascript:return Valida(this)"> Na mesma página do Form:
      <script language="JavaScript"> function Valida(form) { var formulario = document.getElementById('id-do-form-aqui'); <% set BD=server.createobject("adodb.connection") BD.open MM_global_STRING Dim rsATV : Set rsATV = Server.CreateObject("adodb.recordset") rsATV.Open "usuarios",BD,3,3 'Tentativa de correção de acentuação no BD bem sucedida. 'Response.CharSet = "windows-1250" 'Session.LCID = 1046'PADRÃO BRASILEIRO rsATV.AddNew rsATV("us_nome_real") = Request.Form("FNAME") rsATV("us_email") = Request.Form("EMAIL") rsATV("us_nome") = Request.Form("USUARIO") rsATV("us_senha") = Request.Form("SENHA") rsATV("us_confirme_senha") = Request.Form("CONFIRMESENHA") rsATV.Update rsATV.Close %> formulario.submit(); return false }; end function </script>  
      Os Form é enviado, o novo registro no banco é criado, mas sem os dados do form, ou seja, um registro em branco.
       
      Desde já agradeço a ajuda.
       
       
    • Por Gabriel Zaia
      Pessoinhas, estou tendo um probleminha com logica, estou tentando fazer um upload multiplo de imagens com nomes variados de imagens e queria salvá-as depois os nomes das imagens no banco de dados com as seguintes informações: 
      id, Nome da imagem, id da casa
      Porém está ocorrendo um erro ao realizar upload 
      Parse error: syntax error, unexpected ',' in adm\gravar.php on line 16
      Se puderem me ajudar.
      Obs: Sou meio novato na área, então tenham paciência suahsuha.
      <?php session_start(); include('config/config.php'); $idcasa = $_SESSION["idcasa"]; $banner = 1; $diretorio = "fotos/"; if(!is_dir($diretorio)) { echo "Pasta $diretorio nao existe"; }else{ $arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : FALSE; for ($controle = 0; $controle < count($arquivo['name']); $controle++){ $aleatorio = rand(5, 10); $valor = substr(str_shuffle("AaBbCcDdEeFfGgHhIiJjKkLlMmNnPpQqRrSsTtUuVvYyXxWwZz0123456789"), 0, $aleatorio); $novonome = $valor.'.jpg'; $destino = $diretorio."/".$arquivo['name'][$controle]. $nomefinal; if(move_uploaded_file([$controle], $destino)){ echo "Upload realizado com sucesso <br>"; $sql = mysqli_query("insert into fotos (id, nome, idcasa) values ('', '$novonome', '$idcasa')") }else{ echo "Erro ao realizar upload! <br>"; } } } ?>  
    • Por dezoldan
      Quero obter e passar para uma outra página um valor da coluna do listView. Os campos do ListView: ID: 01; Nome: Daniel; Campo: campo; <%# Eval("campo").ToString() == "nada consta" ? "nada consta" : Eval("campo") + "<a href='Promocao.aspx'> ... + infos</a>"%>  
      Quando usuário clicar em "... + infos" quero pegar o "ID" e o "Nome" e levar pra outra página.
    • Por huzzer
      Boa tarde pessoal, possuo algumas dúvidas... Estou iniciando o desenvolvimento de uma aplicação que conecta a um Webservice, com header authentication, a empresa responsável forneceu o endereço do WSDL, usuario e senha para acesso... Tentei efetuar isso via PHP, porém acredito que não seja viável... A questão é...alguém indicaria uma melhor linguagem WEB para consumir esse Webservice, ou se não for abusar muito, um material para estudo...apostilas, videos e etc? Precisaria dessa parte de estudo devido a aprender sobre o negócio, não quero "mastigado" hehe. Muito obrigado pela atenção de todos, bom dia.
    • Por Mateus_Jp
      Boa Tarde Senhores,
       
      Estou iniciando meus estudos em PHP e já consegui fazer várias coisas hehe...
       
      Meu sistema de Upload de Arquivos está funcionando tudo OK, copiando a imagem do PC para a pasta img dentro do www.
      Porém essa mensagem de erro está me incomodando e não sei como solucionar, já vi algumas sugestões na internet mas nada resolveu ainda.
      Não queria meu sistema funcionando mas com uma mensagem de erro.
       
      Warning: copy(): Filename cannot be empty in C:\AppServ\www\login\pags\cadastro.php on line 48
       
      Meu código (cadastro.php):
      <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>    <script>     $(document).ready(function(){     $('#showPassword').on('click', function(){          var passwordField = $('#password');     var passwordFieldType = passwordField.attr('type');     if(passwordFieldType == 'password')     {         passwordField.attr('type', 'text');         $(this).val('Ocultar');     } else {         passwordField.attr('type', 'password');         $(this).val('Mostrar');     }   }); }); </script> </head> <body> <h4>Cadastre-se</h4> <hr> <link href='https://fonts.googleapis.com/css?family=Ubuntu' rel='stylesheet' type='text/css'> <div class="container">   <form action="" id="loginForm" method="POST" enctype="multipart/form-data">     <p><label for="nome">Nome *</label><br><input type="text" name="nome" placeholder="Nome Completo" class="form-control"/></p><br>     <p><label for="usuario">Usuário *</label><br><input type="text" name="usuario" placeholder="Nome do Usuário" class="form-control"/></p><br>     <p><label for="password">Senha *</label><br><input type="password" name="senha" id="password" placeholder="Senha" /> <img id="showPassword" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABDUlEQVQ4jd2SvW3DMBBGbwQVKlyo4BGC4FKFS4+TATKCNxAggkeoSpHSRQbwAB7AA7hQoUKFLH6E2qQQHfgHdpo0yQHX8T3exyPR/ytlQ8kOhgV7FvSx9+xglA3lM3DBgh0LPn/onbJhcQ0bv2SHlgVgQa/suFHVkCg7bm5gzB2OyvjlDFdDcoa19etZMN8Qp7oUDPEM2KFV1ZAQO2zPMBERO7Ra4JQNpRa4K4FDS0R0IdneCbQLb4/zh/c7QdH4NL40tPXrovFpjHQr6PJ6yr5hQV80PiUiIm1OKxZ0LICS8TWvpyyOf2DBQQtcXk8Zi3+JcKfNafVsjZ0WfGgJlZZQxZjdwzX+ykf6u/UF0Fwo5Apfcq8AAAAASUVORK5CYII=" /><br><br>     <p><label for="email">E-Mail *</label><br><input type="email" name="email" placeholder="Endereço de E-Mail" class="form-control"/></p><br>     <p><label for="avatar">Avatar</label><br><input type="file" name="avatar" id="avatar"><br><br><input type="reset" value="Apagar"><br><br><br><br>     <input type="submit" value="Cadastrar" class="btn btn-primary btn-lg btn-block">     <input type="hidden" name="cadastrar" value="register">   </form> </div>      </body> </html> <?php      $nome_temporario=$_FILES["avatar"]["tmp_name"];     $nome_real=$_FILES["avatar"]["name"];     copy($nome_temporario,"img/$nome_real");     cadastro($con); ?> Esse cadastro($con) é uma function que efetua o cadastro e está em outro php, mas creio que ele não será necessário.
      O erro está informando que é esta linha: copy($nome_temporario,"img/$nome_real");
       
      Alguém teria alguma luz pra me ajudar???
       
      Grato, Mateus.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.