欢迎来到我的博客,这里关注汽车研发、Bo-blog博客、域名网站等专业内容!如果你喜欢我的博客,请将本站“加入收藏”,有空多来看看!

Apahce是个很NB的WWW服务器,其下的Mod_Rewrite更是一个异常NB的模块。

今天谈一下Mod_Rewrite的强大功能之一——.htaccess防盗链功能。

比如你有一个网站,拥有spyrise.com,spyrise.cn,spyrise.org三个域名。为了达到图片防盗链的目的,可以在根目录下面建一个.htaccess文件,内容如下:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !spyrise.com [NC]
RewriteCond %{HTTP_REFERER} !spyrise.cn [NC]
RewriteCond %{HTTP_REFERER} !spyrise.org [NC]


RewriteRule .(jpg|gif|png|bmp|swf|jpeg) /error.gif [R,NC,L]

RewriteRule ^(.*)$ http:\/\/image.spyrise.cn\/image\/$1 [L]

蓝色部分,是判断是否盗链。如果以上条件都成立(即访问图片的请求,既不是直接输入网址,也不是来自spyrise.com,也不是来自spyrise.cn,也不是来自spyrise.org的话),就执行下列转向。

红色部分,是让所有盗链 img 目录下 jpg、gif、png、bmp、swf、jpeg 文件的网页,显示的图片都用根目录下的 error.gif 图片替换掉。注意替换显示的图片不要放在设置防盗链的 img 目录下。如果照上面的规则判断出图片请求不是盗链的,就执行以下转向。

绿色部分,是对 img 目录下所有的请求都转向到目标服务器,比如有个图片原来的 url 是 http://www.spyrise.org/img/girl.jpg ,现在就会转到 http://image.spyrise.org/image/girl.jpg 去。当然了你得先把原服务器 img 目录下的文件统统拷贝到临时服务器的 image 目录下,转向才会真正可用。起到的效果就是把原服务器图片下载所占用的流量统统省下,让临时服务器来承受了。

但要注意Mod_Rewrite模块会使Apache性能略有下降,不过比起Mod_Rewrite带来的好处,这点也不算什么了,呵呵。

  常常在一些网站上下载某软件时,会提示“请不要盗链”之类的警告,然后就自动跳回该网站的首页上去了。至少我是经常碰到这种情况的,明明是从google上搜索到后链上去的,却提示我不要盗链,觉得很可笑,也很无奈。

  其实对策也很简单,临时关掉Norton Internet Security(简称为NIS),重新刷一遍这个页面,就能正常下载了。其中的原因是什么呢?我猜想有一种可能是该网站用了cookie认证。但是如果关掉NIS,只要打开一次这个页面,也能下载,说明这不是通过cookie验证的(对WEB/HTTP不太懂的朋友,其中的原因可能一下子听不太懂)。

  还有一种可能是什么呢?是HTTP_REFERRER(由于初期开发人员的拼写错误,这个词在一部分学科中仍被称作HTTP_REFERER。即,少了一个R)。中文可以称作“引用页”。即,验证你先前是从哪个页面上来到当前这个页面的。NIS里面是有这方面的拦截技术在里面的,所以HTTP_REFERRER信息在跳转时被NIS强行截掉了。于是造成了对方判断你是直接下载该软件,而不是通过先打开某网页,然后点击链接下载软件的做法。

  这是一些网站防盗链的做法,由此也看出是一种很失败的做法(对使用NIS的用户来说,非常麻烦,只能通过临时禁用NIS的方法解决)。

  再举一个例子:www.r-file.com。这是一个日本色情网站。比如,打开 http://www.r-file.com/free/view.php?ID=r233&P=0&N=01.jpg ,如果你打开这个网页,可以看到一张图片。右键点击一下,得到图片的URL为: http://www.r-file.com/free_photo/r233/sample/1/01.jpg 。但是,如果你按这个得到的图片URL重载一遍的话,你会得到一个出错的代码:Forbidden: You don't have permission to access /free_photo/r233/sample/1/01.jpg on this server. 匪夷所思吧?嘿嘿。其实这里面就是HTTP_REFERRER在搞鬼,对方网站开了HTTP_REFERRER验证处理。这也是图片下载防盗链的做法。

  下面谈谈如何突破这种防盗链技术。既然问题的根本原因已经找到了,对策也简单:发送HTTP_REFERRER。只可惜要实现这样的功能,一般的HTML/Javascript是办不到的。一、用PHP、Perl等专业的语言才可以达到。二、PHP、Perl之类的太专业,我们手头的一类软件也可以达到:FlashGet。迅雷之类的应该也可以。不过本人只支持FlashGet,毕竟FlashGet才是老牌的下载利器。

  启动Flashget,打开“新建下载任务”页面,“网址”栏里填入“http://www.r-file.com/free_photo/r233/sample/1/01.jpg”,哈哈,点击OK。图片就可以下载了。但是,你有没有注意到“新建下载任务”页面的第二行“引用”栏里(这就是设置HTTP_REFERRER的地方),什么也没设置,为什么就成功了呢?这个你只要看一下FlashGet的日志就明白了。

Wed Nov 26 20:34:24 2008 已连接.
Wed Nov 26 20:34:24 2008 GET /free_photo/r233/sample/1/01.jpg HTTP/1.1
Wed Nov 26 20:34:24 2008 Host: www.r-file.com
Wed Nov 26 20:34:24 2008 Accept: */*
Wed Nov 26 20:34:24 2008 Referer: http://www.r-file.com/free_photo/r233/sample/1
Wed Nov 26 20:34:24 2008 User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)
Wed Nov 26 20:34:24 2008 Pragma: no-cache
Wed Nov 26 20:34:24 2008 Cache-Control: no-cache
Wed Nov 26 20:34:24 2008 Connection: close
Wed Nov 26 20:34:24 2008 HTTP/1.1 200 OK

  看到了吗?FlashGet有自动添加HTTP_REFERRER的功能。自动添加引用页的功能也可以取消,虽然几乎没人会这么做。设置位置在“选项”->“协议”->“HTTP”部分->“发送引用页”。这个设置是默认是打开的。

   另外提一下,将HTTP_REFERRER设置为http://www.r-file.com/free_photo/r233/sample/1和设置为http://www.r-file.com是相同的。不信你可以自己试试。这只证明访问该图片时是通过访问上述URL后才进行的,即都是来自www.r-file.com。这也是防盗链技术的来源。

   最后提一下,本站的图片及软件下载也都是防盗链的。不过我的博客上没啥特别的东西,别盯住我了。有兴趣研究一下www.r-file.com吧。哈哈。

分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]