您的位置:首页 > 其它

.NET保护图片防盗链技术思路

2012-04-29 17:11 169 查看
此博客是转载百度空间

现在网络中有很多网站提供图片相册功能,为了吸引大量稳定的使用者和浏览者,需要对浏览图片做限制,以免图片被随意链接到其他网站上无代价的利用,杜绝不劳而获。这样做,一方面是尊重图片版权,一方面也是凸现自身网站的图片价值的方法。大家在引用搜狐相册图片、163相册图片、QQ空间图片.....时,如果涉及到防盗链的图片,就会看到一张公用图片提示大家“此图片来自某某相册”,却不显示图片内容。这就是防盗链技术的应用。

假设某个网络服务器日志分析中出现大量来自陌生站点的引用痕迹,通过跟踪引用的内容,发现是自己网站上某份相当有分量有影响力的图片被大量引用。并且每个引用的请求都占用的一定量的带宽,这些引用访问并未对自己网站产生任何有价值的影响,却占用了不少带宽,图片却被某些陌生网站随意拿走利用,说严重一点,也可以认为是窃取。这种现象就需要从技术上采取措施,防止盗链,使自己网站带宽能被更有价值的利用,而不是浪费。

本文提出一种解决方法。当然,技术无止境,这不是唯一的方法,亦不是性能最优良的方法,欢迎讨论:)

具体思路是,利用ASP.NET内建的处理器HttpHandler检查对图片文件的引用请求信息是否来源于自己的网站,而不是其他站点。如果用户是在浏览器地址栏直接输入图片地址,那么对图片文件的引用请求为空NULL。如果是其他网站盗链,那么对图片文件的引用请求即为其他网站地址。对于这两种情况,可以提供一个替换图片向用户表明放盗链的态度,而不在浏览器上显示真正的图片。这个替换图片,就是上文提到的,一张写有“此图片来自某某相册”字样的公用图片。

ASP.NET内建的处理器HttpHandler是一种特别的类,能够对ASP.NET进行扩展,用于处理对某种特定文件的请求,例如对图片文件的请求。并且,程序员可以创建自己的处理器处理对页面的请求,进而替换整个页面处理系统。

要创建一个HttpHandler,首先需要创建一个实现IHttpHandler接口的类。通常在machine.config文件中配置HttpHandler,类似这样的写法:

<httphandlers>

......

<add verb="*" path="*.aspx" tyype="System.Web.UI.PageHandlerFactory">

......

</httphandlers>

然后,编写实现接口的类

C#写法:

public class MyHttphandler : IHttpHandler

{

 public void ProcessRequest(HttpContext context)

 {

  // 此处放置具体功能代码,处理请求,作出响应,发现盗链显示替代图片

 }

 public bool isReusable

 {

  // 此成员定义处理器实例能否被多个请求复用

  get {return true;}

 }

}

然后,在web.config文件中添加HttpHandler,类似这样的写法:

<configuration>

 ......

 <system.web>

  <HttpHandlers>

   <add verb="*" path="*.jpg" type="MyClass, MyDll" />

  </HttpHandlers>

 </system.web>

 ......

</configuration>

思路如上,具体代码中还应填充更多功能代码,例如具体定义处理哪几类图片,替换成什么图片,等等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: