zoukankan      html  css  js  c++  java
  • ASP.NET保护图片防盗链技术思路之一

    现在网络中有很多网站提供图片相册功能,为了吸引大量稳定的使用者和浏览者,需要对浏览图片做限制,以免图片被随意链接到其他网站上无代价的利用,杜绝不劳而获。这样做,一方面是尊重图片版权,一方面也是凸现自身网站的图片价值的方法。大家在引用搜狐相册图片、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;}
     }
    }

    VB.NET写法:
    Public Class MyHttphandler
     Implements IHttpHandler
     Public Sub ProcessRequest(context AS HttpContext)
      ' 此处放置具体功能代码,处理请求,作出响应,发现盗链显示替代图片
     End Sub
     Public ReadOnly Property isReusable() AS Boolean
      ' 此成员定义处理器实例能否被多个请求复用
      Get
       Return True
      End Get
     End Property
    End Class

    然后,在web.config文件中添加HttpHandler,类似这样的写法:
    <configuration>
     ......
     <system.web>
      <HttpHandlers>
       <add verb="*" path="*.jpg" type="MyClass, MyDll" />
      </HttpHandlers>
     </system.web>
     ......
    </configuration>

    思路如上,具体代码中还应填充更多功能代码,例如具体定义处理哪几类图片,替换成什么图片,等等

  • 相关阅读:
    HDU 3681 Prison Break 越狱(状压DP,变形)
    POJ 2411 Mondriaan's Dream (状压DP,骨牌覆盖,经典)
    ZOJ 3471 Most Powerful (状压DP,经典)
    POJ 2288 Islands and Bridges (状压DP,变形)
    HDU 3001 Travelling (状压DP,3进制)
    POJ 3311 Hie with the Pie (状压DP)
    POJ 1185 炮兵阵地 (状压DP,轮廓线DP)
    FZU 2204 7
    POJ 3254 Corn Fields (状压DP,轮廓线DP)
    ZOJ 3494 BCD Code (数位DP,AC自动机)
  • 原文地址:https://www.cnblogs.com/bdzwater/p/2626561.html
Copyright © 2011-2022 走看看