Protegendo contra upload de arquivos maliciosos

Ao permitir que os usuários enviem arquivos ao seu servidor, você deve estar atento ao risco que eles podem apresentar: arquivos .exe podem chegar com vírus e infectar o computador de todos os usuários que fizerem o download. Um invasor pode criar um arquivo .asp e através de FSO ter controle completo sobre seus arquivos.

Para solucionar este problema você deve filtrar os arquivos enviados, aceitando somente aqueles com a extensão desejada. Por exemplo, se você tem um script com a finalidade de enviar imagens, programe-o para aceitar somente arquivos com extensões .jpg e .gif.

Essa restrição poderá ser feita através de um if simples ou com funções pré-existentes em alguns componentes de upload. Veja abaixo alguns exemplos:

Componente ASPSmartUpload
<%
Set objUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
objUpload.MaxFileSize = 30000
objUpload.AllowedFilesList = "jpg,gif" 'Função para restrição de tipos
objUpload.Upload
objUpload.Save("/diretorio")
Response.Write("Arquivo enviado com sucesso!")
%>

Verificação simples utilizando o ASPSmartUpload
<%
Set objUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
objUpload.MaxFileSize = 30000
Dim extensao = Right(objUpload.Name, Len(objUpload.Name) - 3)
If extensao = "jpg" or extensao = "gif" Then
    objUpload.Upload
    objUpload.Save("/diretorio")
    Response.Write("Arquivo enviado com sucesso!")
Else
    Response.Write("Tipo de arquivo inválido!")
End If
%>

Verificação simples utilizando PHP
<?
if (!empty($arquivo) and is_file($arquivo)) {
    $caminho="upload/";
    $caminho=$caminho.$arquivo_name;
    if ((eregi(".gif$", $arquivo_name)) || (eregi(".jpg$", $arquivo_name))){
        copy($arquivo,$caminho);
        print "Arquivo enviado com sucesso!";
    }
    else{
        print "Arquivo não enviado!";
        print "Tipo de arquivo inválido!";
    }
}
?>