A prevenção de hotlinks ASP sempre foi uma dor de cabeça para amigos que criam sites de publicidade. O hotlinking afeta seriamente o funcionamento normal de servidores e sites. Hoje, vamos dar uma olhada em um método para implementar a prevenção de hotlinks ASP. Bar.
Se soubermos o caminho real de um arquivo estático como: http://www.xx.com/download/webjx.pdf, e se o servidor não definir nenhuma restrição especial, poderemos baixá-lo sem esforço! Quando o site fornece download de webjx.pdf, como podemos evitar que o downloader obtenha seu caminho real? Este artigo apresentará como usar o Asp para ocultar o caminho real de download dos arquivos.
Quando gerenciamos arquivos de sites, podemos colocar arquivos com a mesma extensão no mesmo diretório e dar-lhes um nome especial. Por exemplo, o diretório do arquivo pdf é the_pdf_file_s, e o código a seguir é salvo como down.asp e seu caminho online. é http://www.xx.com/down.asp, podemos usar http://www.xx.com/down.asp?FileName=webjx.pdf para baixar este arquivo, e o downloader não pode ver este arquivo O caminho de download real! No down.asp, também podemos definir se é necessário fazer login para baixar o arquivo e determinar se a página de origem baixada é um site externo, evitando assim que o arquivo seja vinculado.
<% From_url = Cstr(Request.ServerVariables(HTTP_REFERER)) Serv_url = Cstr(Request.ServerVariables(SERVER_NAME)) if mid(From_url,8,len(Serv_url)) <> Serv_url then resposta.write Link ilegal! ''Evitar hotlinking resposta.fim terminar se se Request.Cookies (logado) = então response.redirect /login.asp ''Requer login! terminar se Função GetFileName(longname)''/folder1/folder2/file.asp=>file.asp enquanto instr(nome longo,/) nome longo = direita(nomelongo,len(nomelongo)-1) vamos GetFileName = nome longo Função final Escurecer fluxo Escurecer conteúdo Escurecer nome do arquivo Escurecer TrueFileName Escurecer FileExt Const adTypeBinary = 1 NomeArquivo = Request.QueryString(NomeArquivo) se NomeArquivo = Então Response.Write Nome de arquivo inválido! Resposta.Fim Terminar se FileExt = Mid(NomeArquivo, InStrRev(NomeArquivo, .) + 1) selecione Caso UCase (FileExt) Caso ASP, ASA, ASPX, ASAX, MDB Response.Write operação ilegal! Resposta.Fim Finalizar seleção Resposta.Limpar se lcase(right(FileName,3))=gif ou lcase(right(FileName,3))=jpg ou lcase(right(FileName,3))=png então Response.ContentType = image/* ''Nenhuma caixa de diálogo de download aparece para arquivos de imagem outro Response.ContentType = aplicativo/download de ms terminar se Response.AddHeader disposição de conteúdo, anexo; nome do arquivo = & GetFileName (Request.QueryString (FileName)) Definir Stream = server.createObject(ADODB.Stream) Stream.Type = adTypeBinary Stream.Aberto if lcase(right(FileName,3))=pdf then ''Definir diretório de arquivo do tipo pdf TrueFileName = /the_pdf_file_s/&FileName terminar se if lcase(right(FileName,3))=doc then ''Defina o diretório do arquivo do tipo DOC TrueFileName = /meu_D_O_C_arquivo/&NomeArquivo terminar se se lcase(right(FileName,3))=gif ou lcase(right(FileName,3))=jpg ou lcase(right(FileName,3))=png então TrueFileName = /all_images_/&FileName ''Defina o diretório do arquivo de imagem terminar se Stream.LoadFromFile Server.MapPath(TrueFileName) Embora não seja Stream.EOS Response.BinaryWrite Stream.Read (1024 * 64) Wend Stream.Fechar Definir fluxo = nada Resposta.Flush Resposta.Fim %> |