English
 电子信箱
 加入收藏

  威盾防火墙 >> 新闻中心 >> 威盾新闻 >> 如何在ASP.NET中实现防盗链[转]

 

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

威盾防火墙 2014-11-13

 

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

要实现防盗链,我们就得在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, 真不知道为什么?

相关内容: 最新内容:
防盗链问题[2014-11-13]
php下通过伪造http头破解防盗链的代码[2014-11-13]
Apache实现图片防盗链[2014-11-13]
asp.net iis7.5下配置图片防盗链[2014-11-13]
IIS真正能用的ISAPI-Rewrite防盗链规则写法[2014-11-12]
IIS下网站防盗链的方法[2014-11-12]
非常不错的开源免费IIS Rewrite软件 IIRF[2014-11-13]
解决:iisapp 命令 弹出 iisschlp.wsc [88,25] 属性值无效 progid[2014-11-13]
"ASP" 服务的性能库出错的解决[2014-11-13]
防盗链问题[2014-11-13]
PHP论坛软件对决:Discuz! VS PHPWind[2014-11-13]
轻量级HTTP服务器Nginx(Nginx日常维护)[2014-11-13]