如何使用php伪造推荐人的方法防止图片盗链

介绍

这篇文章主要介绍”如何使用php伪造推荐人的方法防止图片盗链”,在日常操作中,相信很多人在如何使用php伪造推荐人的方法防止图片盗链问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“如何使用php伪造推荐人的方法防止图片盗链”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

<强>什么是HTTP引用页
简言之,HTTP推荐人是头的一部分,当浏览器向web服务器发送请求的时候,一般会带上推荐人,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理,比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP推荐人中统计出每天有多少用户点击我主页上的链接访问他的网站。
推荐人其实应该是英文单词上线,不过拼错的人太多了,所以编写标准的人也就将错就错了。
我的问题
我刚刚把饲料阅读器改变为Gregarius,但他不像我以前用的liferea,访问新浪博客的时候,无法显示其中的图片,提示“此图片仅限于新浪博客用户交流与沟通”,我知道,这就是HTTP推荐人导致的。
由于我上网客户端配置的特殊性,首先怀疑是乌贼的问题,但通过实验排除了,不过同时发现了一个鱿鱼和Tor, Privoxy协同使用的隐私泄露问题,留待以后研究。
Gregarius能处理这个问题么?
答案是否定的,因为Gregarius只是负责输出html代码,而对图像的访问是有客户端浏览器向服务器请求的。
不过,安装个firefox扩展也许能解决问题,文中推荐的“发送上线”我没有找的到,但发现另外一个可用的:“RefControl”,可以根据访问网站的不同,控制使用不同的推荐人。
但是我不喜欢用firefox扩展来解决问题,因为我觉得他效率太低,所以我用更好的方式,Privoxy。
Privoxy真棒
在Privoxy的default.action中添加两行:
{+ hide-referrer{打造}}
.album.sina.com.cn
这样Gregarius中新浪博客的图片就出来了吧? + hide-referrer是Privoxy的一个过滤器,设置访问时对HTTP推荐人的处理方式,后面的伪造代表用访问地址当作Refere的,还可以换成块,代表取消推荐人,或者直接把需要用的推荐人网址写在这里。
用Privoxy比用firefox简单的多,赶紧换吧。
从https HTTP
我还发现,从一个https页面上的链接访问到一个非加密的HTTP页面的时候,在HTTP页面上是检查不到HTTP推荐人的,比如当我点击自己的https页面下面的w3c xhtml验证图标(网址为http://validator.w3.org/check?uri=推荐人),从来都无法完成校验,提示:
没有推荐人头发现!
原来,在http协议的rfc文档中有定义:

代码如下:


15.1.3编码敏感信息在uri # 39; s

客户不应该包含一个引用页头字段在一个http请求(不安全)
如果引用的页面转移安全
协议。

这样是出于安全的考虑,访问非加密页时,如果来源是加密页,客户端不发送推荐人,即一直都是这样实现的,Firefox浏览器也不例外。但这并不影响从加密页到加密页的访问。
Firefox中关于推荐人的设置
都在里,有两个键值:
network.http。sendRefererHeader(默认=2)设置推荐人的发送方式,0为完全不发送,1为只在点击链接时发送,在访问页面中的图像什么的时候不发送,2为始终发送。参见隐私小贴士# 3:块推荐人在Firefox
network.http头。sendSecureXSiteReferrer(默认=true)设置从一个加密页访问到另外一个加密页的时候是否发送推荐人,真正为发送,假为不发送。

<>强利用推荐人防止图片盗链

虽然推荐人并不可靠,但用来防止图片盗链还是足够的,毕竟不是每个人都会修改客户端的配置。实现一般都是通过apache的配置文件,首先设置允许访问的地址,标记下来:
#只允许来自don.com的访问,图片可能就放置在don.com网站的页面上
SetEnvIfNoCase推荐人“^ http://www.don.com/"local_ref
#直接通过地址访问
SetEnvIf推荐人“^ $“;local_ref
然后再规定被标记了的访问才被允许:

代码如下:


& lt; FilesMatch“。(gif | jpg)“在
订单允许、拒绝
允许从env=local_ref
& lt;/FilesMatch>

或者

代码如下:


& lt;目录/web/images>
,,否认,允许
,,否认所有
,,允许从env=local_ref
& lt;/Directory>



<强>不要使用Rerferer的地方

不要把Rerferer用在身份验证或者其他非常重要的检查上,因为Rerferer非常容易在客户端被改变,不管是通过上面介绍的Firefox扩展,或者是Privoxy,甚至是libcurl的调用,所以Rerferer数据非常之不可信。

如何使用php伪造推荐人的方法防止图片盗链