`
sealbird
  • 浏览: 570606 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

apache 防盗链

阅读更多
2010-09-25 22:09apche有rewrite_module 模块 
LoadModule rewrite_module modules/mod_rewrite.so 

在<VirtualHost下面家 
RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://www.zenghaofeng.com/.*$ [NC] 
RewriteRule .*.(mp3|jpeg)$ http://www.zenghaofeng.com/ [R,NC] 
#RewriteLog "logs/rewrite.log" 
#RewriteLogLevel 3 


如果是需要在目录中以.htccess文件控制可以这样写: 
在编译Apache时加入--enable-rewrite把mod_rewrite编译进去,如果是1.3.x版本需要在ttpd.conf开启 

LoadModule rewrite_module libexec/mod_rewrite.so 
并且在Addmodule中有 
Addmodule mod_rewrite.c 

则可以使用重写规则.如果是2.x版本编译后就有加载,用/usr/local/apache2/bin/httpd -L|grep rewrite可以看到: 
RewriteEngine (mod_rewrite.c) 
RewriteOptions (mod_rewrite.c) 
RewriteBase (mod_rewrite.c) 
RewriteCond (mod_rewrite.c) 
RewriteRule (mod_rewrite.c) 
RewriteMap (mod_rewrite.c) 
RewriteLock (mod_rewrite.c) 
RewriteLog (mod_rewrite.c) 
RewriteLogLevel (mod_rewrite.c) 
说明已经支持mod_rewrite. 
当外部请求来到Apache,Apache调用重写规则中的定义来重写由用户浏览器指定请求的URI,最后被重写的URI如果是重定向,则送由浏览器作再一次请求;如果是代理则把重写后的URI交给代理模块请求最终的内容(Content),最后把内容送回给浏览器. 
接着确定httpd.conf中需要防盗的<directory XXX>容器中设置有: 

Options Indexes FollowSymLinks 
AllowOverride all 

即开启.htaccess文件的使用权.否则你的.htaccess不会工作. 

在该目录中创建.htaccess文件,加入以下代码: 
RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://zenghaofeng.com[/size]/.*$ [NC] 
RewriteCond %{HTTP_REFERER} !^http://zenghaofeng.com$ [NC] 
RewriteCond %{HTTP_REFERER} !^http://www.zenghaofeng.com/.*$ [NC] 
RewriteCond %{HTTP_REFERER} !^http://www.zenghaofeng.com$ [NC] 
RewriteRule .*.(mp3|gif|jpg|png)$ http://www.zenghaofeng.com [R,NC] 


这里需注意的是,mp3 swf这样设置后,在自己的网站上也不能用播放器播放了,只能提供下载。因为这种防盗链是基于referer(来源地址的)但是,播放器是不发送来源地址。

---------------------------------------------------------

以下的.htaccess放置在站点http://test1的/abc/下。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/abc/(allow1|allow2)
RewriteRule ^.*$ - [L]
RewriteCond %{REQUEST_FILENAME} \.(gif|jpg|png)$ [NC]
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !test1 [NC]
RewriteCond %{HTTP_REFERER} !eschool [NC]
RewriteCond %{HTTP_REFERER} !google\.com [NC]
RewriteCond %{HTTP_REFERER} !baidu\.com [NC]
RewriteRule (.*) /abc/allow1/0.jpg [R,NC,L]
</IfModule>


注意:
1. RewriteCond %{REQUEST_URI} ^/(allow1|allow2) 当用http://test1/abc/allow1/0.jpg访问之时%{REQUEST_URI}值为/abc/allow1/0.jpg

2. RewriteCond %{REQUEST_FILENAME} \.(gif|jpg|png)$ [NC]
当用http://test1/abc/allow1/0.jpg访问之时%{REQUEST_FILENAME}值为/data/apache/htdocs/test1/abc/allow1/0.jpg是系统的绝对路径文件。

3. RewriteCond %{HTTP_REFERER} !^$ [NC]
当用直接在浏览器中输入http://test1/abc/allow1/0.jpg访问之时%{HTTP_REFERER}值为"".
请在test1站点的根目录下放一下文件:index.html内容如下:
<html>
<head><title>测试</title>
</head>
<body>
<div>
test pic:
<img src="/abc/2.jpg"/>
</div>
</body>
</html>
这时%{HTTP_REFERER}值为"http://test1".

4.语意说明:
RewriteCond %{REQUEST_URI} ^/abc/(allow1|allow2)
RewriteRule ^.*$ - [L]
这两句的意思是当 /abc/下的目录allow1与allow2内的文件是可以直接访问的,没有限制。

RewriteCond %{REQUEST_FILENAME} \.(gif|jpg|png)$ [NC] 指访问的文件是图片文件。
RewriteCond %{HTTP_REFERER} !^$ [NC] 不是直接在浏览器中直接访问图片的。
RewriteCond %{HTTP_REFERER} !test1 [NC] 不是来自 test1站点
RewriteCond %{HTTP_REFERER} !eschool [NC] 不是来自 eschool站点
RewriteCond %{HTTP_REFERER} !google\.com [NC] 不是来自 google站点
RewriteCond %{HTTP_REFERER} !baidu\.com [NC] 不是来自 baidu站点
RewriteRule (.*) /abc/allow1/0.jpg [R,NC,L] 当上面这几个条件都成立时则rewrite到/abc/allow1/0.jpg文件。R指的是用外转向,NC指匹配时不区分大小写,L指这时最后一条转向指令,以下的都不执行。



最后我们来次实战演练:
我现在为为showbiz88.com加图片防盗链的功能
1.我的图片文件夹在站点的/files/photo/下,把内容如下的.htaccessy文件也放在/files/photo/下。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/files/photo/allow1
RewriteRule ^.*$ - [L]
RewriteCond %{REQUEST_FILENAME} \.(gif|jpg|png)$ [NC]
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !talent [NC]
RewriteCond %{HTTP_REFERER} !showbiz88.com [NC]
RewriteCond %{HTTP_REFERER} !google\.com [NC]
RewriteCond %{HTTP_REFERER} !baidu\.com [NC]
RewriteRule (.*) /files/photo/allow1/0.png [R,NC,L]
</IfModule>

=========================================

位置一般情况下在 /usr/local/apache/conf/httpd.conf
或者apache 2.2 的 /usr/local/apache2/conf/extra/httpd-vhost.conf
添加

SetEnvIfNoCase Referer "^http://www.ccvita.com" local_ref=1 
SetEnvIfNoCase Referer "^http://ccvita.com" local_ref=1 
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)"> 
Order Allow,Deny 
Allow from env=local_ref 
</filesmatch> 

其中粗体的是您的网址,如果有多个,就加多行
斜体的是您需要防盗链的文件后缀,中间用|隔开


还一种写法,是用正则的,这种写法在各个版本的apache比较通用。
写法是

SetEnvIfNoCase Referer "^<strong>http://.*\.yourdomin\.com</strong>" local_ref=1 
SetEnvIfNoCase Referer "<strong>.*\.yourdomin\.com</strong>" local_ref=1 
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)"> 
Order Allow,Deny 
Allow from env=local_ref 
</filesmatch> 

其中粗体的部分有一点区别,用正则写法, \ 符号代表转义,因为.本身在正则中有自己的作用。

上面说的是Apache防盗链的使用,现在来说Apache防盗链的破解,说简单点Apache防盗链是通过来路来确定用户是否盗链的,如果自己写采集程序的话,我们完全可以利用php的curl_setopt函数中CURLOPT_REFERER和CURLOPT_USERAGENT这个两个函数去模拟referer和useragent的。

=-------------------------------------------------------------------------------------

  1.利用rewrite 确认你的apache 能使用rewrite mod 
  RewriteEngine on 
  RewriteCond %{HTTP_REFERER} !^http://linuxsky.net[/size]/.*$ [NC] 
  RewriteCond %{HTTP_REFERER} !^http://linuxsky.net$ [NC] 
  RewriteCond %{HTTP_REFERER} !^http://www.linuxsky.net/.*$ [NC] 
  RewriteCond %{HTTP_REFERER} !^http://www.linuxsky.net$ [NC] 
  RewriteRule .*.(gif|jpb|png|css|js|swf])$ http://www.linuxsky.net [R,NC] 
  
  其中有色的地方都是要改为你的: 
  红色:就是改为你提供下载页面的地址,也就是只有通过这个地址才可以下载你所提供的东东。 
  蓝色:就是要保护文件的扩展名(以|分开),也就是说以这些为扩展名的文件只有通过红色的地址才可以访问。 
  绿色:如果不是通过红色的地址访问蓝色这些为扩展名的文件时就回重定向到绿色地址上。 
  
  
  2.利用SetEnvIfNoCase 和 access 
  
  SetEnvIfNoCase Referer "^http://linuxsky.net" local_ref=1 
  SetEnvIfNoCase Referer "^http://www.linuxsky.net" local_ref=1 
  <FilesMatch ".(gif|jpb|png|css|js|swf)"> 
  Order Allow,Deny 
  Allow from env=local_ref 
  </FilesMatch> 
  
  红色为信任站点,蓝色为受保护的文件扩展名。 

闪人,如果你有比较好的方式去模拟referer和useragent一定要告诉我,我对采集和模拟浏览器比较有兴趣
 





防盗链 apache 整理2010-09-25 22:21http标准协议中有专门的字段记录referer 

一来可以追溯上一个入站地址是什么 

二来对于资源文件,可以跟踪到包含显示他的网页地址是什么。 

因此所有防盗链方法都是基于这个Referer字段 主要有两种方法实现第一种:使用FilesMatch<VirtualHost *:80>
     ServerAdmin laogui@gmail.com
     DocumentRoot D:/www/www.chinahtml.com
     ServerName www.aaa.com     ServerName aaa.com     盗用连接指定显示的页面。也可以不用此项,这样盗用连接也可无法使用。
     ErrorDocument 404 http://www.chinahtml.com/error.html     允许www.aaa.com的网站使用
     SetEnvIfNoCase Referer "^http://www.aaa.com" local_ref=1     允许 aaa.com   的网站使用
     SetEnvIfNoCase Referer "^http://aaa.com" local_ref=1     定义防盗文件的扩展名
       <FilesMatch "\.(gif|jpg|png|css|js|swf)">
         Order Allow,Deny
         Allow from env=local_ref   允许上面指定域名
     </FilesMatch>
</VirtualHost>防盗链设置样本:使用正则表达式

SetEnvIf Referer "^http://(.)+\.ilinux\.cn/" local_ref=1

SetEnvIf Referer "^http://(.)+\.isql\.cn/" local_ref=1
#SetEnvIf Referer "^http://(.)+\.other\.org\.cn/" local_ref=1
SetEnvIf Request_URI "/logo(.)+" local_ref=0
<FilesMatch "\.(mp3|wmv|png|gif|jpg|jpeg|avi|bmp|ram|rmvb|rm|rar|zip|mp3)">
Order Allow,Deny
Allow from env=local_ref
</FilesMatch>

解释:
1. 蓝色部分,表示设置允许访问的referer地址,第一行的意思为所有http协议访问,以.ilinux.cn结尾的域名地址,第二行类似,只是换成 了.isql.cn,表问我前面的鬼符是什么,不懂得可以去翻正则表达式的研究文献,不想深究的可以照猫画虎设置自己的网站。
2. 绿色部分,表示不在上述引用域名范围内,但可以被放行的特例,本例中表示网站/目录,所有以logo开头的文件(用作允许其它网站的友情连接引用本站logo)。
3. 橙色部分是设置反盗链的关键部分,上面每一个设置都联系到了local_ref这个环境变量,只有这个变量为1,则允许被引用,否则显示一个X。
4. 紫色部分设置了哪些扩展名的文件加入反盗链的规则。

第二种方法:

使用rewirte方式:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://bbs.ilinux.cn/.*$     [NC]
RewriteCond %{HTTP_REFERER} !^http://bbs.ilinux.cn$       [NC]
RewriteCond %{HTTP_REFERER} !^http://www.ilinux.cn/.*$       [NC]
RewriteCond %{HTTP_REFERER} !^http://www.ilinux.cn$       [NC]
RewriteCond %{HTTP_REFERER} !^http://ilinux.cn/.*$       [NC]
RewriteCond %{HTTP_REFERER} !^http://ilinux.cn$       [NC]
RewriteRule .*\.(gif|jpg|jpeg|avi|bmp|ram|rmvb|rm|rar|zip)$ http://www.ilinux.cn [R,NC]
上面的,需要Rewrite模板.所有指定的文件,如果Referer不是上面的值,将被重定向到首页.
还有使用.htaccess 文件的方法,不过不推荐使用,影响apache性能。写一个.htaccess 
包括以下代码: 

SetEnvIfNoCase Referer "^http://google\.com/" local_ref=1 
<FilesMatch "\.(jpg)"> 
Order Allow,Deny 
Allow from env=local_ref 
Allow from 127.0.0.1 
Allow from 123.123.123.123 
</FilesMatch> 

如果你的网址是www.myst.cn就改为 
SetEnvIfNoCase Referer "^http://www\.myst\.com/" local_ref=1 
<FilesMatch "\.(jpg)"> 
这意思是说防止人家连结你的jpg档案.可以增修为 
<FilesMatch "\.(jpg|zip|rar)"> 
ps.最后一个不使用区各线 
Allow from 127.0.0.1 
这表示允许连结主机的IP。
你要是默认其他网站可以连结的话,就填入该主机IP,把上述的code储存为.htaccess然后放入你安装的目录下即可。*nix系统在apache配置文件里面打开使用.htaccess功能。AllowOverride All 

----------------------------------------------------------------------------------------------------------

其实就是用Cookie,配合Apache的URL Rewrite模块很简单的就能实现防盗链下载。

首先在浏览页面的时候,会向客户端发送一个特别的Cookie,例如“Site=jzxue.Com“,盗链而来的将没有这个Cookie。

在Apache的httpd.conf文件里面搜索:

#LoadModule rewrite_module modules/mod_rewrite.so

把它前面的#去掉,再找到<Directory />块,在里面加入类似如下代码:

<Directory />
     # Other configurations …
    RewriteEngine On # 启动URL Rewrite引擎
   RewriteCond %{HTTP_COOKIE} !^.*(?:Site=jzxue.Com).*$ # 对于Cookie里面没有特殊记录的请求进行重定向
   RewriteRule ^.*$ error.html # 将非法访问重定向到错误页面
</Directory>

这样如果一个盗链而来的请求将会因为没有特殊Cookie而被重定向到错误页面,就算实际地址暴露也不怕。至于这个Cookie的内容是什么以及有效时间完全可以由管理员自己来设定,也就是说下载工具也没法伪造,从而防止了服务器资源被盗链的危险。

限制客户端多线程下载

限制多线程现在需要用到一个Apache的扩展模块mod_limitipconn,这里是作者的官方网站http://dominia.org/djao/limitipconn2.html,先下载适合自己版本的模块文件到Apache安装目录下的modules目录下面,然后在httpd.conf文件中搜索:

#LoadModule status_module modules/mod_status.so

把它前面的#去掉,再加入:

ExtendedStatus On
LoadModule limitipconn_module modules/mod_limitipconn.dll # 如果你下载的不是Win版,请把后面的文件名改为你所下载的文件名
<IfModule mod_limitipconn.c>
   <Location /> # 这里表示限制根目录,即全部限制,可以根据需要修改
   MaxConnPerIP 2 # 这里表示最多同时两个线程
   NoLimit html/* # 这里表示html目录下不受限制
   </Location>
</IfModule>

这样来自同一客户端的超过2个的线程请求将被拒绝,从而限制了客户端的多线程下载。

限制下载带宽

这个同样需要扩展模块支持,模块是mod_bw,在作者的官方网站http://ivn.cl/apache/可以下载到。同样也是放入modules目录下面,然后在httpd.conf文件中加入:

LoadModule bw_module modules/mod_bw.dll

再找到<Directory />块,加入:

<Directory />
   # Other configurations …
   BandwidthModule On # 启动带宽限制
    ForceBandwidthModule On # 启动带宽限制
     MaxConnection all 2000 # 最大连接数2000
   Bandwidth all 200000 # 单个客户端最大带宽200KB
</Directory>

这样限制了同时最多2000个连接数,每个客户端最大200KB的下载带宽。

到此,我们的完美限制的HTTP下载服务器就配置完成了,重新启动你的Apache这些功能便能生效了。因为Apache和这些模块都是开源免费 的,我们不需要为此掏一分钱,不用去购买那些第三方的软件,只是需要多去了解一下这些软件的使用说明。不要一切都祈祷有现成美好的东西,自己动手做一次会 有不一样的收获
 



分享到:
评论

相关推荐

    apach防盗链配置

    apache防盗链使用、内含图片解说、文档等

    Apache 防盗链的技术小结

    一. 遭遇图片盗链 个人网站使用的是国外付费空间,有流量限制。今天是 2007.03.29,收到主机商的通知邮件,提醒我本月的流量即将超出配额。——超出流量,就要向万恶的美帝资本家交银子,吓我一跳,平常网站的流量...

    apache虚拟目录和虚拟主机设置详解

    apache服务器 虚拟目录和虚拟主机设置详解

    防盗链模块,(HttpHandler+Apache技术)

    1、防盗链模块, 2、(HttpHandler+Apache技术)

    apache rewrite防盗链三例

    apache rewrite防盗链三例

    Nginx和Apache几种防盗链配置方法实例

    主要介绍了Nginx和Apache几种防盗链配置方法实例,本文使用判断来路的方法实现防盗链,分别给出Nginx和Apache配置实例,需要的朋友可以参考下

    php实现图片文件与下载文件防盗链的方法

    在php中最简单的防盗链办法就是利用php的$_SERVER[‘HTTP_REFERER’]函数来操作了,但是此方法不可靠,我们最终还是需要使用apache,iis来进行操作的,具体的操作方法如下: php防盗链: 复制代码 代码如下:&lt;?php ...

    网站安全狗apache V3.1版

    网站安全狗apache版是一款集网站内容安全防护、 网站资源保护及网站流量保护功能为一体的服务器工具。 网站安全狗apache V3.1版更新内容: 1、新增支持64位apache...10、优化防盗链的判断逻辑,并美化防盗链拦截页面

    Apache下MP3 防盗链的解决办法

    对于很多放MP3的网站来说,防盗链对于控制流量是个非常重要的事情,尤其是MP3被百度收录之后,那流量大的惊人,每天都上百G的流量,很快你的站点的流量就会用光了。

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例033 Zend Studio中部署Apache服务器 60 第2章 PHP基础 63 2.1 基本语法 64 实例034 在页面中打印PHP的配置信息 64 实例035 在页面中打印服务器时间 65 实例036 在页面中打印当前执行的PHP文件名 67 实例037 区分...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例033 Zend Studio中部署Apache服务器 60 第2章 PHP基础 63 2.1 基本语法 64 实例034 在页面中打印PHP的配置信息 64 实例035 在页面中打印服务器时间 65 实例036 在页面中打印当前执行的PHP文件名 67 实例037 区分...

    htaccess 防盗链,防止目录浏览等10大技巧

    htaccess 防盗链,防止目录浏览等10大技巧,使用apache服务器的朋友可以参考下

    Apache Web应用详解及优化全攻略

    一、apache优化之保持连接、网页传输压缩、页面缓存时间...三、apache优化之防盗链; 四、apache的ab压力测试; 五、apache 日志分析工具; 六、apache访问控制; 七、apache优化之日志分割; 八、apache实现虚拟主机;

    apache urlrewrite防盗链功能配置

    配置虚拟主机时,在配置文件中加入如下内容

    网站安全狗Apache版 v4.0.18089

    (5)支持Apache网站的防盗链及重要资源防下载功能;(6)支持Apache网站的CC攻击防护网站安全狗apache v3.5版全部更新内容:1、新增网站后台防护功能;2、CC攻击防护功能新增路径白名单;3、整合最新网马查杀引擎和...

    Apache中利用mod_rewrite实现防盗链

    前提Apache中的mod_rewrite模块为激活状态,既然要消灭掉mp3文件的盗链就顺便也把图片盗链的设置给做了,下面是我在网站根目录的.htaccess文件中的配置,供同病相怜之人参考:。 view plaincopy to clipboard...

    nginx rewrite重写规则与防盗链配置方法教程详解

    导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标记的几种形式,盗链时返回403错误,允许的域名直接跟在第二行的域名后面。 nginx rewrite重写规则与防盗链配置方法如下所示: nginx rewite...

Global site tag (gtag.js) - Google Analytics