Pesquisar este blog

segunda-feira, 11 de janeiro de 2016

6 Bugs em páginas de Upload de arquivos


Cinco Bugs em páginas de Upload6 Bugs em páginas de Upload

    1. Eu estava fazendo upload de arquivo no site do agiletesters e encontrei um Bug no NodeBB, não conseguia fazer o upload do arquivo. Analisando o problema vi que quando exportei a apresentação que fiz pra imagem, ele gerou a extensão com letra maiúscula.
    O NodeBB não foi capaz de notar isso, provavelmente o programador quando fez a função deixou em lowercase a validação, a melhor forma é você converter tudo que vem pra lowercase ou seja letras minúscula. Isso é bem comum de acontecer esse tipo de problema nas aplicações, o programador com pressa deixa a validação em lowercase ou uppercase, esquecendo de validar os dois na sua validação. Fica aqui essa dica para conhecimento dos testadores.

   Caso vocês tenham dúvida que seja um erro, leia sobre o desenvolvimento de uma página de upload abaixo:

   No código apresentado na  linha 32 ele usou a função strtolower, todo bom programador sabe que tem que converter o código pra lowercase , senão pode dar problema.

Função aonde ele converte o a extensão pra letras minúsculas:
 $extensao = strtolower(end(explode('.', $_FILES['arquivo']['name'])));

http://php.net/manual/pt_BR/function.strtolower.php

  Exemplo real site do Agile Testers.

Alguns testadores leigos vão dizer que isso não é problema, existem muitos programas que converte a extensão pra letras maiúsculas, no meu caso foi o PowerPoint, um programa muito utilizado. Muitos clientes podem reclamar do sistema que não esta fazendo o upload, até você explicar para o cliente isso já deu bastante problema. É claro que não é problema do Agile Testes, que somente adotou o NodeBB, a questão que esta sendo levada aqui é outra.

2. Outro problema das páginas de Upload, é deixar fazer o upload de qualquer extensão sem restrição, nesse caso o NodeBB fez muito bem, como vemos abaixo:


Já vi sites serem invadidos por esse problema, ao fazer o upload de arquivos .php/.jsp/.java, pode ser executados remotamente pelo servidor, tendo acesso a enviar comandos no servidor, abrir portas para conexão, copiar dados, infectar outras máquinas com vírus, ou até mesmo travar o servidor com loops infinitos.

No site do "linha de código" ele desenvolveu um código bem legal, faz esse tipo de validação com um array, ele também poderia ler um arquivo de configuração .properties, sem precisar mexer no código para acrescentar uma nova extensão, caso o cliente venha pedir.

// Array com as extensões permitidas
$_UP['extensoes'] = array('jpg', 'png', 'gif');


Com isso evitamos o problema abaixo:


Um teste que se pode fazer é alterar a extensão da imagem, tentando enganar a aplicação, exemplo:
teste.png.php

3. Terceiro Bug é deixar fazer upload de arquivos muito grandes, sem nenhuma limitação. Isso pode gerar vários problemas de performance no servidor, para evitar essa dor de cabeça futuramente, limite o tamanho dos arquivos de upload. No código do "linha de código" ele fez bem feito, limitou em 2 megabyte.
// Tamanho máximo do arquivo (em Bytes)
$_UP['tamanho'] = 1024 * 1024 * 2; // 2Mb

Teste: Tente fazer upload de um arquivo gigante como 300Mb fora da rede da empresa, tente fazer a aplicação travar.

4. Nosso quarto problema em páginas de upload é caracteres especiais e acentuação, algumas páginas de upload armazena o nome em um banco de dados, se o charset não estiver correto, isso pode gerar algum erro. Uma dica seria converter todo nome para caracteres aplicáveis em entidades html, em PHP se usa a função htmlentities para codificar os caracteres, e você usa a função
html_entity_decode para decodificar os caracteres. Dessa forma não teremos problema.


5. Nosso quinto bug, é um problema simples, de você fazer o upload de uma imagem e ela não esta sendo exibida, geralmente o link ou o caminho esta quebrado, alguns programas geram o caminho dinamicamente e concatena com o nome do arquivo, também pode acontecer de endereço do servidor mudou, ou até mesmo não foi dado a permissão necessária.

Com essas dicas evitamos o problema abaixo (HTTP Error 500):



6. Nosso sexto bug é na verdade uma melhoria de Usabilidade, muitas páginas de Upload você consegue baixar um arquivo por vez, acho muito chato como usuário, fazer o upload de uma imagem por vez, perco muito tempo nesse processo, podemos melhorar isso, aumentando o número de upload, mas temos que limitar esse número por problemas de performance, 4 imagens/arquivos por vez seria uma maravilha.

Espero que com esses dicas você venha pegar inúmeros bugs, e ajudar a melhorar os sistemas Web. Bom espero ter ajudado a comunidade de testadores! Se tiver alguma dúvida deixe um comentário, ela será bem respondida.


http://www.w3schools.com/php/func_string_html_entity_decode.asp
http://www.w3schools.com/php/func_string_htmlentities.asp

Nenhum comentário:

Postar um comentário