php防盗链实现

有时我们希望访问我们网站的用户只能通过特定的链接或页面进入我们的网站页面,此时就需要实现防盗链技术。这就用到了http协议中的referer内容过滤。

例如在我们本地有一个网页,路径为:http://localhost/http/fdl_one.php,内容如下:

<a href="fdl_two.php">click here to see more</a>

还有另一个网页,路径为:http://localhost/http/fdl_three.php,内容如下:

<a href="fdl_two.php">I also want to see more</a>

这两个网页想访问的页面,即http://localhost/http/fdl_two.php,均是可以各自访问到的。但是如果想过滤掉fdl_three.php的访问,即只能通过fdl_one.php的超链接进入fdl_two.php,fdl_two.php中中的内容可如下:

<?php
	if(isset($_SERVER['HTTP_REFERER'])){
		if(strpos($_SERVER['HTTP_REFERER'],"http://localhost/http/fdl_one.php")===FALSE){
			header("Location:http_test_err.php");
		}else{
			echo "yes,you can see it now.";
		}
	}else{
		header("Location:http_test_err.php");//如果用户不是通过链接点击,此时不会有referer,跳转到禁止访问提示页面
	}

?>

http_test_err.php存放禁止访问信息。

值得一提的是strpos的返回值。返回参数2字符串存在于参数1字符串中起始的位置,如果没有找到参数2,则返回FALSE。故在使用时,应先判断是否匹配,此时应严格控制返回值的类型和值,使用===符号。(因为匹配时有可能出现返回值为0的情况!!)

真正使用中应用的更广的是某个页面可以通过自己的站点访问到,而不能通过其他站点跳转进入。此时只需修改strpos函数中参数2的内容,改为自己站点的目录名。即可过滤掉其他的访问。

时间: 2024-10-09 09:43:30

php防盗链实现的相关文章

LNMP - Nginx配置防盗链

配置防盗链的目的:当别的网站盗用了我们网站的图片,视频等文件资源,放到他们自己的网站上去,一方面这属于无耻的盗窃行为,另一方面在并发量很大的情况下势必会无端增加我们网站的流量,增加服务器的负载. 解决办法:与Apache一样,Nginx也可以限制referer # cd /usr/local/nginx/conf/vhosts # vim test.conf server { listen 80; server_name www.test.com; index index.html index.

apache配置防盗链

如果有人将你网站上的图片链接,复制到他的网站上,访问走的流量还是我的,对我的带宽会造成很大的影响.所以需要设置防盗链. SetEnvIfNoCase Referer "^http://.*\.test\.com" local_refSetEnvIfNoCase Referer "^http://.*\.aaa\.com" local_ref<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png|js|css)&

Apache配置域名跳转、日志切割、静态缓存、防盗链、访问控制

·/usr/local/apache2/bin/apachectl  -M:查看安装了哪些模块 ·/usr/local/apache/bin/apachectl   -V:查看使用的模式 ·/usr/local/apache2/bin/apachectl  -t:检查语法错误 ·/usr/local/apache2/bin/apachectl  -l:查看安装的库文件 ·/usr/local/apache2/bin/apachectl graceful:重新加载配置 ·/usr/local/ap

HTTP 笔记与总结(6)referer 头与防盗链

在百度贴吧(或 QQ 空间等)中找到一张图片,复制图片地址,在站外通过 img src 引用,会发现: 此外,在一些统计软件中,统计访客的来路(直接访问.外部链接.搜索引擎),都用到了 HTTP 协议请求头中 Referer 的知识. [例]直接访问 www.baidu.com 和 在通过本地页面跳转至 www.baidu.com,观察 HTTP 请求头信息的差异: ① 直接访问百度,HTTP 请求头信息: ② 通过本地 referer.html 跳转至 www.baidu.com: HTTP

Nginx实现图片防盗链(referer指令)

什么是图片盗链   每张图片在浏览器中都有对应的图片地址,在浏览器中输入这个地址是可以直接拿到图片. 图片盗链,就是盗用者在他的站上需要显示我们的图片,他没有把图片拿下来,放到他的服务器上, 而是直接就用我们的,图片地址,来请求到我们的服务器来拿图片,流量产生在我们这边. referer referer指令通过检测访问图片的来源,来做出一些控制. 图片访问的来源 通过谷歌/百度访问 通过浏览器直接访问 本站点的访问 来自非法的域名访问 referer nginx 模块 ngx_http_refe

Nginx下载防盗链(迅雷等下载软件)

什么是下载盗链   假设我们是一个B站,有些视频资源是可以提供给用户下载的.这时迅雷等其他下载软件,也提供下载该视频的服务, 但是迅雷很不厚道的,将我们的下载资源提供给他的用户,下载.占用我们的带宽来服务他的用户,这是绝对不可以忍了的. 使用来源判断根本不靠谱,只能防止一些小白站点的盗链,迅雷之类的下载工具完全无效,如果你是 nginx 的话,使用 secure link 完美解决这个问题,远离迅雷. 本文仅用于下载服务器,不适用于图片防盗链. 原理 用户访问 down.php down.php

LNMP搭建11:Nginx配置防盗链

我们网站上的资源如果没有设置防盗链,那么其他人可以通过资源链接盗用我们的资源,占用我们的带宽,影响我们网站对合法用户的服务质量.举个例子,假如我们网站上有一张图片,如下图所示: 复制图片地址,可以直接在浏览器中搜到我们的图片,也可以在其他地方通过该图片地址引用或下载该图片. 为了不让别人盗用我们的资源,我们可以在服务器上设置防盗链. 编辑虚拟主机配置文件 [[email protected] vhosts]# vim test.conf 添加指定类型文件的防盗链 没错误重新加载配置文件 [[em

用Nginx给网站做一个简单的防盗链

目录结构 Nginx防盗链配置 有些时候,大家不想让别人调用自己的图片,一是因为个人版权的问题,再一点就是会增加服务器的负载.还会产生一些没必要的流量. 其实在Nginx里面,很容易就做到防盗链的,在nginx.conf文件加入一个localtion配置项. 下面请看配置: location ~ .*\.(jpg|jpeg|JPG|png|gif|icon)$ { valid_referers blocked www.qixing318.com qixing318.com; if ($inval

利用nginx“ngx_http_referer_module”模块设置防盗链

ngx_http_referer_module模块允许拦截"Referer"请求头中含有非法值的请求,阻止它们访问站点. 需要注意的是伪造一个有效的"Referer"请求头是相当容易的, 因此这个模块的预期目的不在于彻底地阻止这些非法请求,而是为了阻止由正常浏览器发出的大规模此类请求. 还有一点需要注意,即使正常浏览器发送的合法请求,也可能没有"Referer"请求头. 语法:  valid_referers none | blocked | s

web盗链及防盗链的措施

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