防盗链原理

摘要:
百度百科对反水蛭的定义是,这些内容不在自己的服务器上,通常是一些晦涩难懂的小网站窃取一些强大的大网站的地址(例如一些音乐、图片和软件的下载地址),并将其放在自己的网站上。腾讯拒绝从其他网站的页面访问该资源。没有一个请求会将整个页面内容发送到本地浏览器。第一个请求将返回页面的HTML文本。如果网站没有页面中描述的资源。URL格式用于指示链接到当前网页或文件的位置。

昨天去参加一个面试,面试官上来就问“知道防盗链吗?它是怎么实现的?”。当时立刻傻了,防盗链是什么东东?

百度百科对防盗链的定义是

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

这段话理解起来很生涩,举个例子:有时候我们从一个网站,比如腾讯,转载了一篇文章到自己的博客或空间,发现一些图片显示不了,这就是防盗链在起作用。图片是放在腾讯的服务器上的,腾讯拒绝其它网站的页面访问该资源。

一般情况下,当我们浏览一个网页时,并不是一次请求就会把整个页面的内容传到本地浏览器,尤其是当这个页面带有图片或者其它资源。第一次请求会传回该页面的HTML文本,浏览器解析该文本发现还有图片,会发送第二次请求,请求获得图片。盗链问题是:如果一个网站没有页面中所说的资源,它就会把这个图片链接到别的网站,这样没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现,这样显然,对于那个被利用了资源的网站是不公平的。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。

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

Nginx防盗链的配置

  1、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表示所有子域名。

  2、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;

  }

  }

  Apache防盗链的配置

  Apache 防盗链的第一种实现方法,可以用 Rewrite 实现。首先要确认 Apache 的 rewrite module 可用:能够控制 Apache httpd.conf 文件的,打开 httpd.conf,确保有这么一行配置:

  LoadModule rewrite_module modules/mod_rewrite.so

  然后在相应虚拟主机配置的地方,加入下列代码:

  ServerName www.php100.com

  # 防盗链配置 参数

  RewriteEngine On

  RewriteCond %{HTTP_REFERER} !^http://php100.com/.*$ [NC]

  RewriteCond %{HTTP_REFERER} !^http://php100.com$ [NC]

  RewriteCond %{HTTP_REFERER} !^http://www.php100.com/.*$ [NC]

  RewriteCond %{HTTP_REFERER} !^http://www.php100.com$ [NC]

  RewriteRule .*.(gif|jpg|swf)$ http://www.php100.com/img/nolink.gif [R,NC]

  php100.com/www.php100.com 表示自己的信任站点。gif|jpg|swf 表示要保护文件的扩展名(以|分开)。nolink.gif 盗链后的重定向页面/图片。用以输出警示信息,这张图片应该尽可能的小。

  有些用户使用的是虚拟主机,没有服务器的控制权,无法修改 httpd.conf 文件和重启服务器。那么请确认你的虚拟主机支持 .htaccess,将上面的配置写入 .htaccess 文件,放入根目录或图片所在的目录即可:

  # 防盗链配置

  RewriteEngine On

  RewriteCond %{HTTP_REFERER} !^http://php100.com/.*$ [NC]

  RewriteCond %{HTTP_REFERER} !^http://php100.com$ [NC]

  RewriteCond %{HTTP_REFERER} !^http://www.php100.com/.*$ [NC]

  RewriteCond %{HTTP_REFERER} !^http://www.php100.com$ [NC]

  RewriteRule .*.(gif|jpg|swf)$ http://www.php100.com/img/nolink.gif [R,NC]

  通过判断referer变量的值,判断图片或资源的引用是否合法,只有在设定范围内的 referer,才能访问指定的资源,从而实现了防盗链(Anti-Leech)的目的。需要指出的是:不是所有的用户代理(浏览器)都会设置 referer 变量,而且有的还可以手工修改 referer,也就是说,referer 是可以被伪造的。本文所讲的,只是一种简单的防护手段。当然,应付一般的盗链也足够了。

免责声明:文章转载自《防盗链原理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇windows添加右键菜单Firefox功能强大的浏览器 (转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android开发图片分辨率问题解决方案

dpi是什么呢?dpi是“dot per inch”的缩写,每英寸像素数。四种密度分类: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high)一般情况下的普通屏幕:ldpi是120,mdpi是160,hdpi是240,xhdpi是320。 dpi计算公式DPI=对角线的像素值/尺寸 手...

Web1.0、Web2.0、Web3.0的主要区别

Web1.0:以静态、单向阅读为主,网站内信息可以直接和其他网站信息进行交互,能通过第三方信息平台同时对多家网站信息进行整合使用。 Web2.0:以分享为特征的实时网络,用户在互联网上拥有自己的数据,并能在不同的网站上使用。 Web3.0:将以网络化和个性化为特征,提供更多人工智能服务,完全基于Web,用浏览器即可实现复杂的系统程序才具有的功能。 Web3...

将某个div内容保存成图片,使用html2canvas截图方法(高清图并解决图片跨域问题)

首先附上html2canvas的CDN地址:http://www.bootcdn.cn/html2canvas/ ; 此方法可截取整个div的内容,包括不可视区域,并且可以实现跨域图片截图。之前看了很多关于html2canvas插件图片跨域的解决办法,大部分的答复是在服务器端配置,之后将useCORS属性设置为true,但是如果图片是保存在别人家的服务器上...

python 调用百度ORC进行文字识别

最近大神推荐一个新的东西,orc文字识别,是免费的,感觉特别不错,所以打算自己弄来玩玩。 首先要自己上百度申请一个账号https://cloud.baidu.com/product/ocr.html,登陆百度云,然后添加一个应用。创建好应用以后,就跟图片中一样,其中的API KEY 和 Secret Key 要记住,等会调用的时候要用到。 创建好应用以后,首...

简单验证码识别程序(源码)

摘自:http://www.lafdc.com/captcha/20080708.htm 简单验证码是指验证码图片里的字符,固定不变,或者变化很小的验证码,比如:字符上会有一些感扰点感扰线等情况,或者只有少数几种字体变化和字体大小变化。    这里给出源代码都是非常简单的源代码,学过《C程序设计》的都可以看懂,不会超出书本范围,而且不使用指针,这样VB,D...

CSRF攻击实验 ——合天网安实验室学习笔记

实验链接 本实验以PHP和Mysql为环境,展示了CSRF攻击的原理和攻击过程。通过实验结果结合对攻击代码的分析,可更直观清晰地认识到Web安全里这种常见的攻击方式。 链接:https://sourl.cn/6JzCRs 实验简介 实验所属系列:web攻防 实验对象:本科/专科信息安全专业 实验类别:实践实验类 预备知识 浏览器有关Cookie的设计缺...