如何在ASP.NET中实现防盗链[转]

 

对于网站盗链行为,是非常不道德的。我们也不能只是谴责那些没素质的家伙,最终还得在技术上防止网站资源被别人盗用。

要实现防盗链,我们就得在IIS处理类似图片文件的资源时拦上一刀,检查它的通行证是否合法,不合法的请求我们就要坚决的毙掉。

我们先来看一张有关IIS处理请求的图


这张图片说名了一个ASP.NET 处理管道的流程。首先一个请求过来以后,会先被IIS(WinXP中的进程叫做aspnet_wp.exe,Win2003中叫做w3wp.exe),如果IIS发现请求的时asp页面,那么就交给asp.dll进行处理;如果请求的是一个aspx页面,那么就交给aspnet_isapi(IIS扩展)进行处理,如果是HTML 页面、文本文件、JPEG 和 GIF 图像,那么IIS进程就自己进行处理。

我们看到在ASP.NET处理管道中要经历一个HttpModule和HttpHandler。我们要用到的就是HttpHandler。也就说我们要自己实现一个HttpHandler来处理图片啊,压缩包什么的请求。
实现起来也不是很难,只要继承并实现IHttpHandler接口就可以了。



其中 IsReusable 说明是否可以被缓存,而ProcessRequest方法就是如何进行处理的代码。

1. 我们可以通过判断context.Request.UrlReferrer来分辩请求是否合法,然后通过context.Response.WriteFile(context.Request.PhysicalPath);来输出文件。
2. 还要通过配置config文件来让asp.net知道有这个httphandler,格式类似于下面这个。


• verb可以是"GET"或"POST",表示对GET或POST的请求进行处理。"*"表示对所有请求进行处理,这里是对GET请求进行处理。
• path指明对相应的文件进行处理,"*.aspx"表示对发给所有ASPX页面的请求进行处理。
• type属性中,逗号前的字符串指明HttpHandler的实现类的类名,后面的字符串指明Dll文件的名称。
3. 最后还要配置IIS,将要处理的文件类型映射到aspnet_isapi.exe




这样当有对gif图片的请求是就会通过我们的HttpHandler,让我们可以斩断盗链“黑手”。

但是如何你要防止盗链的文件比较多,有gifjpgrarziptxtbmp,等等时,我们还要在web.config中进行配置么?如果Handler的变更要修改web.config,会造成网站的重启。是否有好的解决方案呢,大家可以去想想,找找。我下次在接着说:)

参考资源:
ugoer
msdn


本来想写来自哪里的,可是哪个图片是防止盗连的(汗....)就不写了,顺便ps dudu一下,以前上传图片都可以很大的,现在限制成了200k, 真不知道为什么?
posted @ 2006-04-18 21:45  徐灿钊Asp.net专栏  阅读(3601)  评论(0编辑  收藏  举报