用ASP实现防盗链的功能

盗链一直是站长们比较头痛的问题,但我们又无力支付防盗链组件的费用,那么,使用我的这种方法就是最完美的解决方案。

首先,不要着下载文件放置于网页目录中。

我们通常是将下载文件放置于网页目录中的,比如整个网页目录为 D:\wwwroot\,那么我们通常的下载目录是 D:\wwwroot\downloads\,这样就给盗链者提供了一个很重要的漏洞。现在,我们将下载目录放置于别处。这里,我们将它与WEB目录平行,放置于D:\downloads\。

第二步,我们利用Adodb.Stream下载文件

使用下面这个函数,利用Adodb.Stream实现下载

Function downloadFile(strFile, sNewFile)
Response.Buffer = True
Response.Clear

Set oStream = Server.CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1

Set oFso = Server.CreateObject("Scripting.FileSystemObject")
if not oFso.FileExists(strFile) then Response.End

Set oFile = oFso.GetFile(strFile)
intFilelength = oFile.Size
oStream.LoadFromFile(strFile)
If Err Then
Response.Write "Error: Unknown Error!"
Response.End
End If

Response.AddHeader "Content-Disposition","attachment; filename=" & sNewFile
Response.AddHeader "Content-Length",intFilelength
Response.CharSet = "UTF-8"
Response.ContentType = "application/octet-stream"
Response.BinaryWrite oStream.Read
Response.Flush

oStream.Close
Set oStream = Nothing
End Function

使用方法如下:
Call downloadFile(原路径, 下载后的文件名)

比如: downloadFile("D:\downloads\1.rar", "1.rar")

当然,你也可以将下载后的文件名,加上你网站的标识,如:
downloadFile("D:\downloads\1.rar", "azhi.net.cn_1.rar")

经过以上操作,我们在测试的过程中,你有可能会发现网页报错“超过响应缓冲区限制。此 ASP 页的执行造成响应缓冲区超过其配置限制”等等。这个问题是由于ASP页的执行造成的响应缓冲区太大而出现的,我们可以加大Buffer的缓冲区,办法是:
1、先在服务里关闭iisadminservice服务。
2、找到 windows\system32\inesrv\下的metabase.xml,打开,找到 AspBufferingLimit 把他修改为需要的值,默认为4194304,即4096KB,4M,建议把它修改为41943040(40M)或适合的数值,取决于服务器内存是否足够大。
3、重启iisadminservice服务。

值得注意的是:
1、要注意服务器内存量是否足够。
2、还有因为数据量比较大,相应的还要修改ASP处理时间,即:
修改“AspScriptTimeout“ 默认值90(秒)
修改“AspSessionTimeout“ 默认值20(分钟)。

第三步,防盗链
ASP中有个内置对像 Request.ServerVariables("HTTP_HOST") 可以读出当前的网址,而Request.ServerVariables("HTTP_REFERER") 可以得到来源网址,这样以来就简单了。我们只需要对比一下两个值是否一样,得可以知道是否是盗链了。

Related Posts