`
sealbird
  • 浏览: 584636 次
  • 性别: 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 防盗链的技术小结

    ### Apache防盗链技术详解 #### 一、背景与问题描述 在互联网的发展过程中,网站间的资源共享变得越来越频繁,其中图片资源的共享尤为突出。对于个人网站或者小型网站来说,经常面临的一个问题是“图片盗链”。这...

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

    ### Apache虚拟目录和虚拟主机设置详解 #### 一、虚拟目录(Alias) 在Apache服务器配置中,虚拟目录(也称为别名)是一种重要的技术,它允许我们定义一个URL路径,并将其映射到服务器上的实际物理目录。这不仅提高...

    linux配置防盗链及访问控1

    2. **配置Apache防盗链** 在Apache配置文件中,我们可以通过`SetEnvIfNoCase`指令来定义允许的Referer。在示例中,配置文件`/usr/local/apache2.4/conf/extra/httpd-vhosts.conf`中,设置了允许的Referer为`...

    网站防盗链(IIS7.0与IIS7.5配置防盗链)

    除了上述方法,还可以通过设置自定义HTTP响应标头(如`X-Accel-Redirect`)或使用其他第三方模块如mod_security(Apache服务器上的扩展)来实现防盗链。然而,这些方法超出了IIS7.0和7.5的基本配置范围,需要更深入...

    Java爬虫小例子,爬取小网站,突破防盗链下载图片

    这个"Java爬虫小例子"项目展示了如何利用Java来爬取小型网站,特别是那些有防盗链保护的图片资源。防盗链是网站为了防止其他网站直接引用其服务器上的资源而采取的一种防护措施。下面我们将深入探讨相关的知识点。 ...

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

    在这个场景中,我们重点关注的是使用HttpHandler和Apache服务器来构建防盗链模块的方法。 HttpHandler是ASP.NET框架中的一个关键组件,它允许开发者自定义HTTP请求的处理流程。通过创建并注册HttpHandler,我们可以...

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

    【Nginx与Apache防盗链配置方法】 在互联网上,防止其他网站未经许可直接引用(盗链)服务器上的资源,如图片、视频等,对于节省带宽和保护内容权益至关重要。Nginx和Apache作为两种广泛应用的Web服务器,都有各自...

    优化dis

    Apache防盗链技术是一种防止其他网站直接链接到自己网站上受版权保护的资源,如图片、视频、PDF文件等,从而节省带宽和防止资源滥用的手段。从给定文件中,我们可以了解到实现Apache防盗链的两种方法,下面详细介绍...

    呆呆防盗链扩展版 v1.4

    《呆呆防盗链扩展版 v1.4:服务器流量保护与外链管理详解》 在互联网服务中,服务器流量的管理至关重要,特别是对于提供大量资源下载或内容分享的站点而言,防止恶意或非授权的外部链接(即盗链)窃取服务器资源...

    [其他类别]Apache 防盗连工具_apache_link.zip

    "Apache防盗连工具_apache_link.zip"这个压缩包可能包含了用于帮助用户配置Apache服务器,防止其资源被他人未经许可地链接和使用的相关资料。下面我们将详细讨论Apache防盗连技术及其配置方法。 首先,我们需要了解...

    文件防盗链的实现(射雕英雄java传系列)

    标题中的“文件防盗链的实现(射雕英雄java传系列)”指的是通过编程技术来防止他人未经许可盗用网站上的文件,如图片、音频或视频等。在这个特定的上下文中,我们可能关注的是Java语言实现的防盗链技术。防盗链是为了...

    PHP防盗链的基本思想 防盗链的设置方法

    PHP防盗链是一种保护网站资源不被非法使用的技术手段。当一个网站的图片、视频、软件或其他文件被别的网站通过链接的方式直接...网站开发者在实现防盗链时,应该注意技术的更新换代,保证防盗链功能的安全性和有效性。

    在IIS下真正能用的ISAPI-Rewrite防盗链规则写法

    ISAPI_Rewrite 是一款用于IIS服务器的URL重写工具,它允许管理员通过规则配置,实现URL美化、防盗链、动态网站静态化等多种功能。本文主要介绍如何在IIS下利用ISAPI_Rewrite编写防盗链规则,以保护网站资源免受非法...

    Apache下MP3 防盗链的解决办法

    针对这种情况,Apache服务器提供了一种解决方案,即通过其内置的模块Mod_Rewrite实现MP3防盗链功能。 Apache的Mod_Rewrite模块是一个强大的URL重写工具,它可以基于特定的规则对请求的URL进行转换。在MP3防盗链的...

    apache rewrite防盗链三例

    Apache Rewrite 防盗链三例 Apache Rewrite 是一个功能强大的 URL 重写模块,可以用来实现防盗链、 URL 重写、重定向等功能。防盗链是指防止其他网站非法使用本站的资源,例如图片、视频、CSS、JS 等。下面是三个...

    apache urlrewrite防盗链功能配置

    总的来说,Apache URLRewrite的防盗链配置是一项有效的网站管理策略,能够保护你的网络资源不被滥用,同时也可以根据需要扩展到其他类型的文件或更复杂的逻辑。在实际操作中,应确保配置的灵活性和适应性,以便应对...

    [影音娱乐]无组件音乐防盗链程序(PHP)_ft_php.zip

    4. **URL重写与路由**:为了实现防盗链,可能需要使用URL重写技术(如Apache的mod_rewrite),或者在PHP中自定义路由逻辑,以隐藏真实文件路径。 5. **Session和Cookie管理**:验证用户身份并跟踪会话状态可能需要...

    网站图片防盗Apache配置

    #### Apache配置防盗链的基本原理 防盗链的核心思路是通过服务器端设置来限制非授权站点对网站资源的引用。具体到Apache服务器上,主要是利用`.htaccess`文件中的规则来判断请求来源是否合法,并据此决定是否返回...

Global site tag (gtag.js) - Google Analytics