防盜鏈的原理:
不直接給出伺服器中真實的url,將要訪問的檔案放到伺服器上不可訪問的目錄中,所以要訪問的檔案就必須通過asp讀取檔案以二進位流的類型來傳送檔案,如果加上來源地址和使用者登入狀態的判斷,可以一定意義上的防止盜鏈。
缺點是:不過開銷也會很大。
下面是兩個樣本的函數,沒有加上許可權判斷。
Sub downloadFile(strFile)
On error resume next
Server.ScriptTimeOut=999999
Dim S,fso,f,intFilelength,strFilename,DownFileName
strFilename = Server.MapPath(strFile)
Response.Clear
Set s = Server.CreateObject("ADODB.Stream")
s.Open
s.Type = 1
Set fso = Server.CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(strFilename) Then
'Response.Write("<h1>錯誤: </h1>
系統找不到指定檔案")
showimg "images/logos.gif"
Exit Sub
End If
Set f = fso.GetFile(strFilename)
intFilelength = f.size
s.LoadFromFile(strFilename)
If err Then
'Response.Write("<h1>錯誤: </h1>" & err.Description & "<p>")
showimg "images/logos.gif"
Response.End
End If
Set fso=Nothing
Dim Data
Data=s.Read
s.Close
Set s=Nothing
If Response.IsClientConnected Then
Response.AddHeader "Content-Disposition", "attachment; filename=" & strFile
Response.AddHeader "Content-Length", intFilelength
Response.CharSet = "UTF-8"
Response.ContentType = "application/octet-stream"
Response.BinaryWrite Data
Response.Flush
End If
End Sub
ASP防盜鏈輸出圖片函數 showimg (需要Persits.Jpeg組件支援)
Sub showimg(FileName)
Response.Clear
Dim Jpeg,temp_pic
On Error Resume Next
Set Jpeg = Server.CreateObject("Persits.Jpeg")
If -2147221005=Err then
'Response.write "沒有這個組件,請安裝!" '檢查是否安裝AspJpeg組件
downloadFile FileName
Exit Sub
End If
Jpeg.Open (Server.MapPath(FileName)) '開啟圖片
If err.number then
'Response.write "開啟圖片失敗,請檢查路徑!"
Jpeg.Open (Server.MapPath("images/logos.gif"))
response.end
End if
temp_pic=Jpeg.Binary
Response.ContentType = "image/*"
Response.AddHeader "Content-Disposition","filename=" & arr_FileName(FileName)
Response.BinaryWrite temp_pic
Response.End
End Sub