用Asp隐藏文件路径,实现防盗链 的代码

时间:2021-05-18

用Asp隐藏文件路径,实现防盗链
  如果我们知道一个静态文件的实际路径如:http:///down.asp?FileName=51windows.pdf来下载这个文件了,而且下载者无法看到这个文件实际下载路径的!在down.asp中我们还可以设置下载文件是否需要登陆,判断下载的来源页是否为外部网站,从而可以做到防止文件被盗链。

示例代码:

<%
From_url=Cstr(Request.ServerVariables("HTTP_REFERER"))
Serv_url=Cstr(Request.ServerVariables("SERVER_NAME"))
ifmid(From_url,8,len(Serv_url))<>Serv_urlthen
response.write"非法链接!"'防止盗链
response.end
endif

ifRequest.Cookies("Logined")=""then
response.redirect"/login.asp"'需要登陆!
endif
FunctionGetFileName(longname)'/folder1/folder2/file.asp=>file.asp
whileinstr(longname,"/")
longname=right(longname,len(longname)-1)
wend
GetFileName=longname
EndFunction
DimStream
DimContents
DimFileName
DimTrueFileName
DimFileExt
ConstadTypeBinary=1
FileName=Request.QueryString("FileName")
ifFileName=""Then
Response.Write"无效文件名!"
Response.End
Endif
FileExt=Mid(FileName,InStrRev(FileName,".")+1)
SelectCaseUCase(FileExt)
Case"ASP","ASA","ASPX","ASAX","MDB"
Response.Write"非法操作!"
Response.End
EndSelect
Response.Clear
iflcase(right(FileName,3))="gif"orlcase(right(FileName,3))="jpg"orlcase(right(FileName,3))="png"then
Response.ContentType="image/*"'对图像文件不出现下载对话框
else
Response.ContentType="application/ms-download"
endif
Response.AddHeader"content-disposition","attachment;filename="&GetFileName(Request.QueryString("FileName"))
SetStream=server.CreateObject("ADODB.Stream")
Stream.Type=adTypeBinary
Stream.Open
iflcase(right(FileName,3))="pdf"then'设置pdf类型文件目录
TrueFileName="/the_pdf_file_s/"&FileName
endif
iflcase(right(FileName,3))="doc"then'设置DOC类型文件目录
TrueFileName="/my_D_O_C_file/"&FileName
endif
iflcase(right(FileName,3))="gif"orlcase(right(FileName,3))="jpg"orlcase(right(FileName,3))="png"then
TrueFileName="/all_images_/"&FileName'设置图像文件目录
endif
Stream.LoadFromFileServer.MapPath(TrueFileName)
WhileNotStream.EOS
Response.BinaryWriteStream.Read(1024*64)
Wend
Stream.Close
SetStream=Nothing
Response.Flush
Response.End
%>

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章