防盗链

2017-04-12  本文已影响325人  TTTTTriM

定义:

此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。

实现原理:

要实现防盗链,我们就必须先理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。有了referer跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。

常见实现方式:

  1. NGINX
  1. SESSION
  2. CDN
  3. 自主逻辑

NGINX实现

nginx针对文件类型的防盗链配置方法:

location ~* \.(gif|jpg|png|swf|flv|bmp)$ {
  valid_referers none blocked *.php100.com php100.com;
  if ($invalid_referer) {
      #rewrite ^/ http://www.php100.com/403.html;
      return 403;
  }
}
//这种方法是在server或者location段中加入:valid_referers none blocked,其中none表示空的来路,也就是直接访问,比如直接在浏览器打开一个文件,blocked表示被防火墙标记过的来路,*.php100.com表示所有子域名。

nginx针对文件目录的防盗链配置方法:

location /img/ {
    root /data/img/;
    valid_referers none blocked *.php100.com php100.com;
    if ($invalid_referer) {
        rewrite ^/ http://www.php100.com/error.gif;
        #return 403;
    }
}

SESSION实现

强制用户使用资源时必须登录,通过用户SESSION来控制网站资源的使用。

CDN实现

原理
基于时间戳防盗链的功能其实每家的CDN都是支持的。主要是通过使用约定的加密字符串来对具有访问有效期的资源链接进行一些加密计算的到一个sign值,然后访问外链里面带上这个sign和截止时间戳去访问CDN的节点,CDN的节点会用同样的算法来计算访问链接是否合法,如果不合法则返回403 Forbidden,否则返回所要访问的资源。
算法说明
基于时间戳的防盗链是通过对时间有关的字符串进行签名,将时间,签名通过一定的方式传递给CDN服务器作为判定依据,CDN边缘节点依据约定的算法判断来访的URL是否有访问权限。
如果通过,执行下一步;如果不通过,响应 HTTP 状态码 403。如果同时配置了Referer方式防盗链,UserAgent防盗链,时间戳防盗链,那么如果有其中一项没有通过,那么即响应403。
引用:七牛防盗链算法说明

自主逻辑

此处指是抛砖引玉,肯定会有很多种自主逻辑实现的防盗链的方式,譬如:参考使用过滤器实现资源文件的限制,不过效率上肯定没有方式的高,但是逻辑上能控制的点会更加自由和多样化,不失为一种方式。此处只是归纳出有这种方式存在,不做过多的深究!

上一篇下一篇

猜你喜欢

热点阅读