Pergunta

Eu tenho uma pasta em meu servidor web usada para os usuários fazerem upload de fotos usando uma página ASP.

É seguro o suficiente conceder permissões de gravação IUSR à pasta?Devo garantir outra coisa?Tenho medo de que hackers ignorem a página ASP e carreguem conteúdo diretamente para a pasta.

Estou usando ASP clássico e IIS6 no Windows 2003 Server.O upload é feito por HTTP, não por FTP.

Editar:Alterando a pergunta para maior clareza e alterando minhas respostas como comentários.

Foi útil?

Solução

além disso, eu recomendaria não permitir que os usuários façam upload para uma pasta acessível na web.Mesmo a melhor detecção de tipo MIME pode falhar e você absolutamente não deseja que os usuários carreguem, digamos, um executável disfarçado de jpeg em um caso em que sua detecção de MIME falhe, mas aquela no IIS funciona corretamente.

No mundo PHP é ainda pior, porque um invasor pode fazer upload de um script PHP malicioso e depois acessá-lo através do servidor web.

Sempre, sempre armazene os arquivos enviados em um diretório em algum lugar fora da raiz do documento e acesse-os através de algum script de acesso que faça limpeza adicional (e pelo menos defina explicitamente uma imagem/qualquer tipo MIME.

Outras dicas

Como o usuário fará o upload das fotos?Se você estiver escrevendo uma página ASP para aceitar os arquivos carregados, somente o usuário que o IIS executa precisará de permissão de gravação na pasta, já que o IIS fará a E/S do arquivo.Sua página ASP deve verificar o tamanho do arquivo e ter alguma forma de autenticação para evitar que hackers encham seu disco rígido.

Se você estiver configurando um servidor FTP ou algum outro método de transferência de arquivos, a resposta será específica para o método escolhido.

Você terá que conceder permissões de gravação, mas poderá verificar o tipo MIME do arquivo para garantir uma imagem.Você pode usar o FSO assim:

set fs=Server.CreateObject("Scripting.FileSystemObject")
set f=fs.GetFile("upload.jpg")
'image mime types or image/jpeg or image/gif, so just check to see if "image" is instr
if instr(f.type, "image") = 0 then
   f.delete
end if
set f=nothing
set fs=nothing

Além disso, a maioria dos objetos COM de upload possui uma propriedade type que você pode verificar antes de gravar o arquivo.

Sua melhor relação custo-benefício provavelmente seria usar um componente de upload (usei ASPUpload) que permite fazer upload/download de arquivos de uma pasta que não pode ser acessada no site.

Você obterá alguns ganchos de autenticação e não precisará se preocupar com alguém navegando casualmente na pasta e baixando os arquivos (ou fazendo upload no seu caso), já que os arquivos estão disponíveis apenas por meio do componente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top