动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   Asp → 阅读文章

 利用ADODB.Stream 防盗链

作者来源: 
阅读 1998 人次 , 2006-4-18 3:20:00 

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>

<%

'******************************

'文件名使用URL参数/表单项传递,项名为FileName,对GIF和JPG等图片直接输出,其他文件则一律弹出下载提示框

'例:<img src="showFile.asp?FileName=1.jpg" border="0" />

' <a href="showFile.asp?FileName=1.doc">下载文件</a>

'******************************

On Error Resume Next

Response.Buffer = True

Response.Clear

Const FileDir = "" '根据你的文件所在目录修改

Function GetFilePath(FileName,FileDir) '防止盗链,当来源地址中的域名和当前文件地址的域名不同时则输出自定义错误图片nosteal.gif

Dim Server_v1,Server_v2

Server_v1 = Cstr(Request.ServerVariables("HTTP_REFERER"))

Server_v2 = Cstr(Request.ServerVariables("SERVER_NAME"))

IF(Server_v1<>"" And Mid(Server_v1,8,Len(Server_v2)) = Server_v2)THEN

GetFilePath = FileDir & FileName

ELSE

GetFilePath = "nosteal.gif"

END IF

End Function

Function GetContentType(FileName)

Select Case LCASE(Right(FileName, 4))

Case ".asf"

GetContentType = "video/x-ms-asf"

Case ".avi"

GetContentType = "video/avi"

Case ".doc"

GetContentType = "application/msword"

Case ".zip"

GetContentType = "application/zip"

Case ".xls"

GetContentType = "application/vnd.ms-excel"

Case ".jpg","jpeg",".gif",".png",".bmp"

GetContentType = "image/*"

Case ".wav"

GetContentType = "audio/wav"

Case ".mp3"

GetContentType = "audio/mpeg3"

Case ".mpg", "mpeg"

GetContentType = "video/mpeg"

Case ".rtf"

GetContentType = "application/rtf"

Case ".htm", "html"

GetContentType = "text/html"

Case ".txt"

GetContentType = "text/plain"

Case ELSE

GetContentType = "application/octet-stream"

End Select

End Function

Sub UseStream(FilePathString,FileNameString)

Dim FileStream,File,FileContentType,IsAttachment

SET FileStream = Server.CreateObject("ADODB.Stream")

FileStream.Open

FileStream.Type = 1

FileStream.LoadFromFile(Server.MapPath(FilePathString))

FileContentType = GetContentType(FileNameString)

IF(FileContentType <> "image/*")THEN

IsAttachment = "attachment; "

ELSE

IsAttachment = ""

END IF

Response.AddHeader "Content-Disposition", IsAttachment & "filename=" & FileNameString

Response.AddHeader "Content-Length", FileStream.Size

Response.Charset = "UTF-8"

Response.ContentType = FileContentType

Response.BinaryWrite FileStream.Read

Response.Flush

FileStream.Close

SET FileStream = Nothing

End Sub

Dim FileName,FilePath

FileName = Trim(Request.QueryString("FileName"))

FilePath = GetFilePath(FileName,FileDir)

UseStream FilePath,FileName

IF(Err.Number <> 0)THEN

Err.Clear

Server.Execute("NoImg.gif")

END IF

%>

  
 本文Tags防盗链  stream  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:ASP防SQL注入攻击程序
· 下一篇:ASP精华问题及解答(4)
· 微软组件服务(COM+)
· 如何使用JSP+MySQL创建留言本
· 如何注册组件
· Response对象4
· 用ADO连接数据库的三种方法及其性能比较


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077