什么是盗链

现在有很多很多的个人站长都会为了节省费用直接调用其它网站图片或下载地址,这样导致服务器费用大增或导致网站负载不了,下面我来给大这介绍利用iis
httpd.ini中IIS防盗链功能实现防图片,下载资源被其它网站调用的方法。

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

一、创建目录 e:Rewrite

  为什么会产生盗链

把 Rewrite 下的四个文件(httpd.ini
、httpd.parse.errors、mtbnotif.dll、Rewrite.dll)上传到这里。

  一般浏览有一个重要的现象就是一个完整的页面并不是一次全部传送到客户端的。如果请求的是一个带有许多图片和其它信息的页面,那么最先的一个Http请求被传送回来的是这个页面的文本,然后通过客户端的浏览器对这段文本的解释执行,发现其中还有图片,那么客户端的浏览器会再发送一条Http请求,当这个请求被处理后那么这个图片文件会被传送到客户端,然后浏览器回将图片安放到页面的正确位置,就这样一个完整的页面也许要经过发送多条Http请求才能够被完整的显示。基于这样的机制,就会产生一个问题,那就是盗链问题:就是一个网站中如果没有起页面中所说的信息,例如图片信息,那么它完全可以将这个图片的连接到别的网站。这样没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现,这样显然,对于那个被利用了资源的网站是不公平的。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。

二、设置IIS属性,选择网站属性,到ISAPI筛选器,

  我遇到的盗链

关闭属性对话框。

  我的网站遇到最多的是两类盗链,一是图片盗链,二是文件盗链。曾经有一个访问量极大的网站盗链我网站的图片,一天竟然消耗了数G的流量。同时,我站放的不少几十兆的大型软件也常遭到文件盗链,大量消耗我站资源。

再次查看网站属性,到ISAPI筛选器

  盗链的解决方案

如果看到状态为向上的绿色箭头,就说明Rewrite模块安装成功了。

  其实通过WEB服务器的URL过滤技术,这个伤脑筋的问题会很容易得到解决。

点添加,在名称中输入rewrite,可执行文件选择刚才解压后的文件Rewrite.dll,点确定;再点确定,

  如果WEB服务器用的是APACHE的话,那么使用APACHE自带的Url
Rewrite功能可以很轻松地防止各种盗链,其原理是检查REFER,如果REFER的信息来自其他网站则禁止访问所需要的资源。

三、修改 e:Rewrite 里的 httpd.ini 文件为下面内容

  那么,IIS支持UrlRewrite吗?

 代码如下

  答案很简单,不支持。但是我们可以通过安装第三方服务器扩展让IIS支持。

复制代码

  目前有一种产品能比较好地支持IIS的UrlRewrite,名字叫ISAPI_Rewrite。

[ISAPI_Rewrite]

  下载地址在:

# Protect httpd.ini and httpd.parse.errors files
# from accessing through HTTP

  这里只有ISAPI
Rewrite的一个LITE版本是免费的,其它都是trial版本。ISAPI Rewrite
Lite的版本功能不支持虚拟站点配置,元数据监测和自动缓存清理。
但是基本的UrlRewrite功能都支持。

# Discuz4.10 Rewrite规则

  如何进行UrlRewrite的设置?

RewriteCond Host: (.+)
# RewriteCond Referer: (?!
RewriteCond Referer:
(?!

  isapi_rewrite利用正则表达式进行替换规则的表示。

RewriteRule .*.(?:gif|jpg|png|exe|rar|zip) /block.gif [I,O,N]

  下面是一个简单的例子,我想让我们的用户输入
实际上访问的是
。那么我们的匹配表达式应该是
/test-([0-9]*).html 对应的格式化表达式应该为 /test.asp?id=$1 。

#以上规则是 *.abc.net 的站点 google baidu不屏蔽

  进行正则表达式的编写的时候,可以利用isapi_rewrite提供的正则表达式测试工具(默认安装提供),进行调试。做好了匹配表达式和格式化表达式,我们可以把它们放到安装目录下的httpd.ini里面。文件保存后,不需重新启动iis即可生效。

必须要保证httpd.ini有可写权限,设置isapi_rewrite安装文件夹everyone具有可修改权限后,去除该文件的只读属性。

  对于我的网站,我防盗链的方法是在httpd.ini里面加入如下语句

httpd.ini默认设置如下:

RewriteCond Host: (.+)

 代码如下

RewriteCond Referer: (?!

复制代码

RewriteRule .*.(?:gif|jpg|png|exe|rar|zip) /block.gif [I,O]

RewriteCond Host: (.+)
RewriteCond Referer: (?!

  然后重启IIS,这时防盗链就开始起作用了,其他网站盗链过来的请求都会被拒绝。

我们在它后面加上一句

  至此,我也终于可以摆脱了被盗链的烦恼了。

 代码如下

复制代码

RewriteRule .*.(?:gif|jpg|png|exe|rar|zip) /block.gif [I,O]

即可实现gif/jpg/png/exe/rar/zip文件的防盗链,盗链页面显示的是/block.gif。block.gif是一个体积较少的图片文件,我们可以在上面打上自己网站的版权标志和防盗链声明。

如果按照上面设置,则除本站以外的所有网站均不能使用这里的图片,如果要允许一些例外的网站比如google,baidu以及其它一些非营利性网站引用该怎么办呢?我们可以用如下正则表达式来实现

 代码如下

复制代码

RewriteCond Referer:
(?!

如果想允许所有google子站和baidu子站形如images.baidu.com,images.google.com等站则做如下设置:

 代码如下

复制代码

RewriteCond Referer:
(?!

至此,一个相当有效的防盗链系统已经出来了,但如上设置有一个问题,如果浏览者浏览了盗链页面后访问本站页面,则被盗链图片的缓存会影响图片的正常显示。把

 代码如下

复制代码

RewriteRule .*.(?:gif|jpg|png|exe|rar|zip) /block.gif [I,O]

改为

RewriteRule .*.(?:gif|jpg|png|exe|rar|zip) /block.gif [I,O,N]

参数N的意思是重新从站点请求文件而不是从本地缓存读取。