HTTP协议之防盗链与反防盗链

仅供HTTP协议的初学者了解。

使用HTTP协议。利用referer做防盗链(不需要用php编写,而是在服务器层面控制就OK了)
我们在网页里访问站外的图片的时候,在图片本站是可以看得,在外头就不能看了
因为header信息中的referer元素。
还有是做统计的时候,
我们能够统计出来用户是从哪个地方,什么时间访问网站的。比如腾讯分析网站
统计的时候是靠什么知道用户从什么地方去的网站


在HTTP协议中  头信息中有一个很重要的选项 referer
referer 表示的是网页的来源以及上一页的地址
如果直接在浏览器输入地址,进入网站,则没有referer头信息


所以,服务器可根据referer来知道用户从哪个网站进来的和图片是从哪个网站进来的

利用referer头信息来设置防盗链的具体操作步骤如下:

/**
如何配置apache服务器。用于图片防盗链(使用url重写)
	
	在web服务器层面,我们可以在http协议的referer头信息来判断,
						如果来自站外,则统一重写到一个很小的防盗链提醒图片上去
步骤:
	1.打开 apache 重写模块 mod_rewrite	
		(D:\wamp\bin\apache\apache2.4.9\conf)	
		#LoadModule rewrite_module modules/mod_rewrite.so				
			把#去掉,重启apache
	2.在需要防盗的网站或者目录下,写 .htaccess 文件(windows下不能直接创建,可以另存)
			并指定防盗链规则
				分析referer信息,如果不是来自本站,则重写
**/
重写规则 .htaccess 文件
 1.哪种情况重写规则
 	是jpeg/gif/png图片的时候
 	是referer头与localhost不匹配的时候

 2.怎么重写
 	统一 rewrite 到某个防盗链图片上
 	RewriteEngine On
 	
 	//只是在改页面下生效
 	Rewrite Base /HTTPxieyi/day1
	//会对以下格式的文件进行重写规则
	RewriteCond %{REQUEST_FILENAME} .*\.(jpg|jpeg|gif|png) [NC]
	
	//如果不是来自localhost的用户,会重写
	RewriteCond %{HTTP_REFERER} !localhost [NC]
	
	//会重写到自学it网的logo上	
	RewriteRule .* http://www.zixue.it/static/image/common/zixuelogo.png


html的具体代码如下

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>图片的防盗链</title>
</head>
<body>
	<p>
		<img src="http://imgsrc.baidu.com/forum/w%3D580%3B/sign=5547962a02d162d985ee621421e4a8ec/0d338744ebf81a4c06403427df2a6059242da6ea.jpg" alt="">
		<img src="./bb.jpg" alt="">
		<img src="./aa.jpg" alt="">
	</p>
	
</body>
</html>


反防盗链的具体代码如下:

<?php 
/**
反防盗链
****/


require('./07.class.php');

$http = new Http('http://localhost/HTTPxieyi/day1/bb.jpg');

//如果没有加以下这句话,就会显示盗链
//加上referer就会告诉浏览器,我是来自localhost的,不是来自其他网站的,你不用防我
$http->setHeader('Referer: http://localhost');
$res = $http->get();
	
	//aaa.显示的倒链
//file_put_contents('./aaa.jpg',substr(strstr($res,"\r\n\r\n"),4));
file_put_contents('./bbb.jpg',substr(strstr($res,"\r\n\r\n"),4));

//应该在判断路径或者response的mime头信息,确定图片的类型






  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值