怎么防止图片被盗链

来源:互联网 发布:淘宝反黑联盟 编辑:程序博客网 时间:2024/04/30 13:52

怎么防止图片被盗链

你用的是Apache服务器,那么使用.htaccess文件就可以很方便的进行设置,从而防止其他站点的用户盗链我们站点的文件。

Apache中的.htaccess文件
.htaccess文件是Apache中相当重要的配置文件,其格式为纯文本,它提供针对目录改变配置的方法,通过在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。

通过.htaccess文件,可以实现简单地很多在IIS中很繁琐甚至无法实现的功能,如密码保护、禁止显示目录列表、阻止/允许特定的IP地址、实现网址的301 重定向等等。

正如上面所说,.htaccess文件将影响其所在的目录及其子目录,因此,如果我们要保护的内容(此处以防止图片盗链为例,即图片)位于网站内多个目录下,可以考虑将其放在根目录下;而如果图片有单独的子目录如“/images/”,则只需将其放置在该目录下(当然也可以放到根目录中)。

需要注意的是,如果通过FTP方式将创建好的.htaccess上传到服务器上,传输模式应为ASCII而非Binary。上传到服务器后,应将其属性通过 CHMOD修改为644 或“RW-R–R–”,这样,可以保证服务器能够使用同时无法通过浏览器修改,当然,.htaccess的可读属性也存在一定的风险:攻击者可通过它找出您要保护的对象或认证文件位置——解决办法是将认证文件.htpasswd放到网站根目录之外,这样,便无法通过网络找到它

使用.htaccess禁止盗链
通过.htaccess来防止网站的图片、压缩文件、或视频等非Html文件被盗链的方法相当简单,通过在该文件中加入几句命令即可保护我们宝贵的带宽。例如本站的设置如下:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !ouyy.com [NC]
RewriteCond %{HTTP_REFERER} !ouyy.cn [NC]
RewriteCond %{HTTP_REFERER} !9la.org [NC]
RewriteCond %{HTTP_REFERER} !msn.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !soso.com [NC]
RewriteCond %{HTTP_REFERER} !yahoo.com [NC]
RewriteCond %{HTTP_REFERER} !yahoo.com.cn [NC]
RewriteRule .*\.(gif|jpg)$ http://domain.com/no.png [R,NC,L]

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

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

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

2、RewriteCond %{HTTP_REFERER} !domain.com [NC]

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

3、RewriteRule .*\.(gif|jpg|png)$ http://domain.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等,不同文件扩展名间使用“|”分割。

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

<script language="JavaScript">
<!--

var who=document.referrer;

if(who || who.indexOf("www.kingsnet.biz") == -1){
//上边网址是你的网站URL
alert("您是从非本地URL链接本站网页,稍后将自动转到本站!");


------------------------------------------
这里
-----------------
于Discuz!论坛中贴图一类附件文件,很容易被别的网站盗链,影响服务器的性能,并且很容易泄漏一些信息。
下面Discuz!为例子,防止附件盗链,阻止游客浏览贴图类附件。

假设你的域名为www.abc.com, 虚拟主机目录结构类似

- htdocs
- Discuz!
+ attachments
+ include
+ ....
index.php
config.php
....
+ phpadmin
+ Others
+ newattachments
+ logs

论坛程序放在htdocs/Discuz!/下面, 通过这样访问 http://www.abc.com/Discuz!你的论坛。
而http://www.abc.com则访问的是htdocs/下的文件。

第一种情况

WEB服务器是APACHE服务器,允许.htaccess定义目录访问控制。在htdocs/Discuz!/attachments/目录建立一个新文件.htaccess,不要漏掉前面这个点。文件内容为以下两行:
Options none
AllowOverride none
然后,只需要修改 D. \templates\default\viewthread.htm即可。

第二种情况
WEB服务器是IIS服务器,或者APACHE服务器但不允许.htaccess定义目录访问控制。
那么你在htdocs所在目录新建一个目录例如/newattachments, 属性 777.此时http://www.abc.com/newattachments/无法访问。如果论坛已经投入使用一段时间,需要把以前的附件移动到新的目录。
然后,修改 ABCD四个文件。



选择性的把以下4个文件按照提示修改:

+ A. config.php
<- $attachdir = './attachments'; // 附件保存位置 (服务器路径, 属性 777, 必须
<- // 为 web 可访问到的目录, 不加 "/")
-> $attachdir = '/www/attachments'; // 附件保存位置 (服务器路径, 属性 777, 必须
-> // 为 web 不允许访问的目录, 可加 "/")

+ B. attachment.php
<- $filename = $discuz_root.$attachdir.'/'.$attach['attachment'];
-> $filename = $attachdir.'/'.$attach['attachment'];

+ C. \include\post.php
<- $source = stripslashes($discuz_root.'./'.$attachdir.'/'.$attach_fname);
-> $source = stripslashes($attachdir.'/'.$attach_fname);

+ D. \templates\default\viewthread.htm
<- $attachurl/$post[attachment]
-> attachment.php?aid=$post[aaid]

补充:以下修改,可以在guest浏览的时候,避免出现X状的图片:

+ E. \templates\default\viewthread.htm
<- <!--{if $post['aaid']}-->
-> <!--{if (!$allowgetattach && !$ismoderator)}-->
-> <br><br>$post[attachicon]
-> <!--{if $post['attachimg'] == 0}-->
-> {lang attachment}: <a href="attachment.php?aid=$post[aaid]" target="_blank">$post[filename]</a> ($post[attachsize])<br><span class="smalltxt">{lang attach_download_count} $post[downloads]
-> <!--{if $post[creditsrequire]}-->, {lang creditsrequire_attach} {lang credit_title} $post[creditsrequire] {lang credit_unit}<!--{/if}--></span><br>
-> <!--{elseif $post['attachimg'] == 1}-->
-> <a href="attachment.php?aid=$post[aaid]" target="_blank">{lang attach_img}</a>
-> <!--{elseif $post['attachimg'] == 2}-->
-> <a href="attachment.php?aid=$post[aaid]" target="_blank">{lang attach_swf}</a>
-> <!--{/if}-->
-> <!--{elseif $post['aaid']}-->


top.location.href = "http://www.255mm.com";
//上边网址是监测到是盗链后转到的URL
}
//-->
</script>
-----------------------
或者:
<?php

$id = $_GET['id'];
$act = $_GET['act'];

switch($act) {
default :
case "display" : displayHTML(); break;
case "down" : down(); break;
}

function displayHTML($id) {
setcookie("visited", "true");

// print your HTML.
}

function down($id) {
if(! isset($_COOKIE['visited']) ) print "你盗联?";

$sql = "select path from TABLE where id=". $id;
//..............................
}
?>

<a href="dl.php?id=1&act=down">Download Now...</a>

原创粉丝点击