.htaccess防盗链方法(文件、图片)

http标准协议中有专门的字段记录referer,一来可以追溯上一个入站地址是什么,二来对于资源文件,可以跟踪到包含显示他的网页地址是什么。

因此所有防盗链方法都是基于这个Referer字段
两种方法:
第一种是使用apache 文件FileMatch限制,在httpd.conf中增加 ( 其实也可以将把下面的语句存成一个.htaccess文件),并放到你的网站 的根目录(就是www/html目录),这样别人就没有办法盗链了。

SetEnvIfNoCase Referer "^http://afish.cnblogs.com/" local_ref=1
Order Allow,Deny
Allow from env=local_ref
Allow from 127.0.0.1

这种方法很方便禁止非允许访问URL引用各种资源文件,请注意,把"http://afish.cnblogs.com/"改为你的网址。

第二种是使用rewrite,需要增加apache的mode_rewrite,支持.htaccess文件目录权限限制,在虚拟主机根目录增加.htaccess文件,把非本地地址refer的图片文件都重定向到警告图片或者警告网页上。

首先要确认你的服务器 或空间的服务器解译引擎为Apache2,还有支持.htaccess客户设置文件,如果你有自己的服务器就请先对./conf/httpd.conf 文件做以下修改,
找到:#LoadModule rewrite_module modules/mod_rewrite.so,把前面的 # 给去掉。
找到第一个 AllowOverride None 改为 AllowOverride All 重启Apache2服务器

接下就是编辑 .htaccess 文件了,.htaccess 文件内容为

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://cnblogs.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://cnblogs.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://afish.cnblogs.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://afish.cnblogs.com$ [NC]
RewriteRule .*.(jpg|jpeg|gif|png|bmp|rar|zip|exe)$http://afish.cnblogs.com/error.html [R,NC,L]

其中有色的地方都是要改为你的:
HTTP_REFERER后面的域名就是改为你提供下载页面的地址,也就是只有通过这个地址才可以下载你所提供的东东。
(jpg|jpeg|gif|png|bmp|rar|zip|exe)就是要保护文件的扩展名(以|分开),也就是说以这些为扩展名的文件只有HTTP_REFERER给出的地址才可以访问。
如果不是通过HTTP_REFERER地址访问扩展名的文件时就回重定向到http://afish.cnblogs.com/error.html,这个方法有个好处是,不同的虚拟主机用不同的描述定义。

接下就是怎么用 .htaccess 文件来实现防盗链了。
首先要在空间上建两个目录(当然目录名自定),假定一个为 web 另一个为down。
web是用来放下载页面的(或下载程序),down当然就是放你提供下载的内容,把.htaccess文件的红色部分改一下,改为http://你的域名/web,蓝色部分改为你要保护文件的扩展名。
绿色部分改为http://你的域名/web。改后保存.htaccess 文件把它上传到down目录。

实例:

<IfModule mod_rewrite.c>  

# 开启Rewrite模块
RewriteEngine On  

# 定义要保护的文件夹,建议只要保护上传文件夹(/wp-content/uploads/)就可以
RewriteBase /wp-content/uploads/  

#允许空的来源,因为用户可能手动输入图片网址
RewriteCond %{HTTP_REFERER} !^$ [NC]  

#允许自己的网站访问啦
RewriteCond %{HTTP_REFERER} !cnblogs.com [NC]  

#允许几个常用的在线阅读器的访问
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
RewriteCond %{HTTP_REFERER} !xianguo.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !feedburner.com [NC]
RewriteCond %{HTTP_REFERER} !feedsky.com [NC]  

#括号中的是要保护的文件拓展名,这里只保护了 gif,jpg,png,再加上出错时的图片地址 no.png
RewriteRule .*\.(gif|jpg|png)$ http://afish.cnblogs.com/no.png [R,NC,L]  

</IfModule>

简单的解释一下上述语句:

1、RewriteCond %{HTTP_REFERER} !^$ [NC]

允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。一般而言,这是可选的,不过,建议这么设置,如果强迫必须具有“HTTP_REFERER”才能访问,可能会带来某些问题,比如说在用户通过代理服务器访问时。

2、RewriteCond %{HTTP_REFERER} !webeta.cn [NC]

设置允许访问的HTTP来源,包括我们的站点自身、Google、Baidu、Bloglines、Feedburner等。

3、RewriteRule .*\.(gif|jpg|png)$ http://afish.cnblogs.com/no.png [R,NC,L]

定义被盗链时替代的图片,让所有盗链 jpg、gif、png 等文件的网页,显示根目录下的 no.png 文件。注意:替换显示的图片不要放在设置防盗链的目录中,并且该图片文件体积越小越好。当然你也可以不设置替换图片,而是使用下面的语句即可:

RewriteRule .*\.(gif|jpg|png)$ - [F]

4、说明一下其中的R、NC 和 L
R 就是转向的意思
NC 指的是不区分大小写
L 的作用是指明本次转向到此结束,后续的转向不受先前判断语句的影响。

5、防止盗链的文件类型

上例中是 gif、jpg、png,而根据需要,可更改或添加其他文件类型,如rar、mov等,不同文件扩展名间使用“|”分割。

这样的话,就可以基本做到简单的防止被盗链情况的发生,而且可以尽最大可能的减少服务器流量的无畏消耗,当然了,如果你不在意这点流量的话,那么可以不用考虑上述设置啦!

.haccess在线编辑工具
中文化界面(支持十种语言,包括正体中文),功能比较完善:
支持:

是否显示文章列表(是否显示网站索引目录)
    是否启用密码保护(可对单个目录启用密码保护)
    各种错误页面设置(400     Bad Request401     Auth Req’d402     Payment Req’d403     Forbidden404     Not Found405     Method Not Allowed406     Not Acceptable407     Proxy Auth Repid408     Request Time Out409     Conficting Request410     Gone411     Content Len Req’d412     Precondition Failed413     Entity Too Long414     URI Too Long500     Int, Server Error501     Not Implemented502     Bad Gateway503     Service Unavailable504     Gateway Timeout505     HTTP Ver Not Sup…)
    预设置页面(设置任意页面为主页)
    www转向设置(将www.重定向)
    301 302转址(用来重定向)
    存取限制(用来防盗链)
    现在 就去看看:http://www.htaccesseditor.com/sc.shtml

还有第三种:

我在解决blog禁止盗链的时候,发现个问题,也算个好方法。blog把所有资源都自己管理起来,用resserver.php来动态显示,这样统一的入口方便添加权限操作。同时造成上面2种方法无法使用,因为不再是apache直接访问资源文件,而是php通过文件读取。

因此只能在php代码中做手脚:在读取资源文件输出之前,加如下判断代码

$referer = $_SERVER[‘HTTP_REFERER‘];
$selfurl = $_SERVER[‘HTTP_HOST‘];  

if(false == strpos($referer,$selfurl)){
    echo ‘非法盗链!‘;
    exit(1);
}

这里有些偷懒,直接看引用地址中是否包含host地址,不过原理就是这样,判断referer是否是本站地址。我们常常在下载的时候,也碰到盗链网站无法下载,报盗链的问题。要下载这类文件最简单的方法就是改referer比方flashget中,网址下面的"引用"一栏中,直接填写下载地址就可以了。
.htaccess是一个完整的文件名,不是***.htaccess或其它格式(当然也有管理员把其设置 成其它名字,但一般都是使用.htaccess)。另外,上传.htaccess文件时,必须使用ASCⅡ模式,并使用chmod命令改变权限 为:644(RW_R__R__) 。每一个放置.htaccess的目录和其子目录都会被.htaccess影响。例如,在/abc/目录下放置了一 个.htaccess文件,那么/abc/和/abc/def/内所有的文件都会被它影响,但/index.html不会被它影响,这一点是很重要的。

实例功能 :文档访问的密码保护

要利用.htaccess对某个目录下的文档设定访问用户和对应的密码,首先要做的是生成一个.htpasswd的文本文档,例如:

afish:z5Ti9HcD

这里密码经过加密,用户可以自己找些工具将密码加密成.htaccess支持的编码。该文档最好不要放在www目录下,建议放在www根目录文档之外,这样更为安全些。

有了授权用户文档,可以在.htaccess中加入如下指令了:

AuthUserFile .htpasswd的服务器目录
AuthGroupFile /dev/null (需要授权访问的目录)
AuthName EnterPassword
AuthType Basic (授权类型)
require user wsabstract (允许访问的用户,如果希望表中所有用户都允许,可以使用 require valid-user)

括号部分为注释

时间: 2024-08-25 00:05:17

.htaccess防盗链方法(文件、图片)的相关文章

防盗链Nginx设置图片防盗链,设置无效的请仔细看红字

*******************************************************************切记,替换的图片地址要使用没有防盗链的网站图片,否则由于替换的图片其实也处于防盗链情况下,会造成仍旧无法显示设置的图片.******************************************************************* 一.全站图片防盗链 在/usr/local/nginx/conf/nginx.conf文件要添加防盗链的ser

[转载]八种常见的防盗链方法总结及分析

作为普通的网民来说,一般不需要知道也不用关心什么是盗链,不过如果你是网站的开发者或维护者,就不得不重视盗链的问题了.如果你刚刚开发完一个没有防盗链的带有文件下载功能的网站,挂上internet,然后上传几个时下非常热门的软件或电影并在网站内公布下载地址,让MSN上的所有好友都来体验一下你的杰作.不用多久就会发现网速出奇地变慢,甚至服务器托管中心的服务员会热情地打电话告诉你的网站流量很大,估计是网站受欢迎起来了,问你是不是该考虑加钱租用带宽更宽但价格更贵的网线了.在这个值得庆祝的时候赶快打开Goo

Apache使用.htaccess防盗链禁止用户下载

今天遇到一个客户,做视频站的,用的是Html5播放器,最开始想隐藏真实地址,尝试了很多办法都没办法隐藏,最后尝试CK切段处理,但是用户体验效果不好,切段多了会出现卡顿情况. 最后没办法和客户商议后决定采用防盗链,禁止非绑定的域名访问下载视频,同样看了很多教程,完全是一脸懵逼不知道怎么操作. 只能不断尝试,最后还是给解决了,方法如下 SetEnvIfNoCase Referer "^http://youer.com" local_ref=1 SetEnvIfNoCase Referer

htaccess高级应用:防盗链阻止迅雷下载以及限制访问

导读: 合理利用htaccess文件,即使没有服务器的管理权限可以解决很多问题:比如用htaccess防盗链,阻止迅雷下载,限制用户访问指定类型的文件.判断User-agent阻止迅雷下载. Rewrite的功能很强大, 合理的利用htaccess文件的设置 即使没有服务器的管理权限可以解决很多问题: 1. 用htaccess限制只能访问某种类型文件控制 httpd.conf 配置文件中可以用 Order.Files 及 FilesMatch 命令来阻止用户查看某种类型的文件,但是当用户被拒绝时

使用Apache的.htaccess就可以防盗链

Apache的.htaccess可以实现很多功能,如密码保护.禁止显示目录列表.阻止/允许特定的IP地址.实现网址的301 重定向等等.本文就来说说使用Apache的.htaccess如何防盗链. 当然防盗链可以用程序解决,如PHP: $referer = $_SERVER['HTTP_REFERER']; $selfurl = $_SERVER['HTTP_HOST']; if(false == strpos($referer,$selfurl)){ echo 'phpddt.com防止非法盗

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

盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率.受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益.做好防止盗链的工作,是每个网站开发者的重要工作. 做好防盗链工作能给网站服务器减少不少压力,这里我们分享一种php防盗链的实现方法: 一般的下载的步骤:查找->输出查找结果列表->进入软件详细页面->点击下载按钮->打开下载页面->

httpd之防盗链和限制下载

配置httpd防盗链可以用SetEnvIfNoCase和rewrite实现反盗链(Anti-Leech) 一.使用SetEnvIfNoCase,注意放行自己的网址 SetEnvIfNoCase Referer "^http://.*\.sunnysky\.com" local_ref SetEnvIfNoCase Referer ".*\.byqk\.com" local_ref SetEnvIfNoCase Referer "^$" local

关于防盗链

什么是盗链 "盗链"的定义是:此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容. 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐.图片.软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量. 为什么会产生盗链 一般浏览有一个重要的现象就是一个完整的页面并不是一次全部传送到客户端的.如果请求的是一个带有许多图片和其它信息的页面,那么最先的一个Http请求被传送回来的是

PHP实现HTTP防盗链

PHP实现HTTP防盗链 2015-01-25 下午 15:00 我们优化服务器时,有时为了尽量减少本站点的流量,从而防止外部站点盗用引用本站图片等资源. 具体具体步骤: (1):在http.conf中打开Apache重写模块mod_rewrite.ko (2):在需要防盗链的网站或者目录下写.htaccess文件并指定防盗链规则. RewriteEngine On????????????????????????????????//开启重写模块 RewriteBase /foruser/HTTP