Nunca é seguro permitir que os usuários façam qualquer coisa sem restrição.
temos um site que permite ao usuário fazer upload dos arquivos. Agora, se eu permitir que o usuário carregue todas as extensões de arquivo sem restringi-las, é seguro? Estou restringindo apenas o tamanho do arquivo de até 1 GB. Dê o seu conselho. Estamos usando o amazon s3 para armazenar os arquivos.
Nunca é seguro permitir que os usuários façam qualquer coisa sem restrição.
Você nunca deve permitir que os usuários façam upload de arquivos que possam ser executados posteriormente. Por exemplo, se o seu servidor tiver o PHP instalado e um usuário tiver carregado um dos inúmeros kits de exploração da Web baseados em PHP (por exemplo, uma variante shell C99) e posteriormente conseguir que o servidor execute (acessando um link para o arquivo) eles ganhariam controle completo ou quase completo sobre seu site / servidor.
Não é apenas o PHP que você precisa se preocupar. Qualquer tipo de arquivo que o servidor da web subjacente pode ou pode executar deve ser proibido ou recebido de forma a impedir a execução.
Mesmo se você filtrar extensões de arquivo como .php ou .py, ainda há o risco de o servidor tentar executar um arquivo quando ele for acessado. Uma tática comum é o invasor anexar uma extensão de arquivo permitida como .jpg ao nome do arquivo (para que você tenha c99.php.jpg
, por exemplo) e, dependendo da configuração do servidor, ele ainda possa ser executado como PHP pelo servidor. Se você estiver executando um SO semelhante ao Unix, um bom passo a tomar é marcar explicitamente os arquivos enviados como não executáveis.
Não permita que seus usuários façam mais do que precisam. Neste caso, você não especificou por que eles estão enviando os arquivos - isso determinará, em parte, quais restrições você deve colocar nos arquivos. (por exemplo, se você tiver um site que lide com documentos, não permita que seus usuários façam upload de aplicativos (.exe), restrinja a um conjunto aceitável de tipos mime de documento).
Eu sugeriria que a consideração mais importante é o que é feito com eles após o upload. Por exemplo, pode ser perfeitamente correto fazer upload de um script - se o script for exibido como texto (por exemplo, GitHub), mas não se o usuário puder acessar o arquivo e executá-lo no servidor. Da mesma forma, fazendo o upload para o S3, você precisa garantir que seus usuários não possam acessar diretamente seus arquivos, caso contrário, é muito fácil alguém enviar um arquivo malicioso e usar sua conta do S3 para veiculá-lo.
Se os usuários não puderem executar os arquivos, não puderem acessá-los diretamente e não puderem enviá-los a outra pessoa (ou seja, eles podem armazenar o arquivo e precisar fazer login para recuperá-lo), serão necessárias menos restrições.