Início‎ > ‎

Evitar nomes de arquivos como parâmetros

Muitas vezes uma aplicação pode necessitar exibir ou enviar arquivos para seus usuários. Em especial em sistemas web, existem páginas que recebem um nome de arquivo como parâmetro e exibem o arquivo em questão para o usuário. Um exemplo seria uma URL do tipo http://java.sapao.net/download?file=imagem.gif.

Este tipo de parâmetro deve ser evitado pois se um adversário poderia enviar o requisição como http://java.sapao.net/download?file=/etc/passwd e, caso a aplicação não restrinja os arquivos que podem ser solicitados, obter o arquivo de senhas do servidor.

Para evitar problemas, a melhor alternativa é montar uma tabela com os nomes dos arquivos que podem ser acessado através da aplicação e atribuir a cada arquivo um identificador único. Desta forma, o máximo que um ataque conseguiria seria baixar um outro arquivo dentre aqueles presentes na lista da aplicação. Ou senão um erro de parâmetro inválido caso o identificador não conste da lista. Neste caso, a URL poderia ser http://java.sapao.net/download?fileId=12345.

Caso a definição da lista de arquivos e/ou a atribuição de identificadores não seja possível, é imprescindível configurar com cuidado o usuário sob o qual o servidor de aplicação irá executar e também as permissões deste usuário no sistema de arquivos do servidor, de forma que a aplicação não tenha acesso a arquivos de sistema. Estas configurações são importantes mesmo se a aplicação restringir os arquivos que podem ser solicitados, de forma a se implementar o princípio de segurança em profundidade.
Comments