PHP实现防盗链的方法分析


Posted in PHP onJuly 25, 2017

本文实例讲述了PHP实现防盗链的方法。分享给大家供大家参考,具体如下:

$_SERVER['HTTP_REFERER']的获取情况

注意 $_SERVER['HTTP_REFERER'] 并不一定总能获取到,只有在以下情况下才能获取到:

一、能够取到HTTP_REFERER的情况为以下几种:

1.直接用<a href>
2.用Submit或<input type=image>提交的表单(POST or GET)
3.使用Jscript提交的表单(POST or GET)

二、不能取到的情况有以下几种:

1.从收藏夹链接
2.单击”主页”或者自定义的地址
3.利用Jscript的location.href or location.replace()
4.在浏览器直接输入地址
5.<%Response.Redirect%>
6.<%Response.AddHeader%>或<meta http-equiv=refresh>转向
7.用XML加载地址

strrpos函数讲解:

strrpos — 计算指定字符串在目标字符串中最后一次出现的位置

说明

int strrpos ( string $haystack , string $needle [, int $offset = 0 ] )
返回字符串 $haystack 中 needle 最后一次出现的数字位置。

$haystack 在此字符串中进行查找。
$needle 如果 needle不是一个字符串,它将被转换为整型并被视为字符的顺序值。

返回值

返回 needle 存在的位置。如果没有找到,返回 FALSE。

盗链判断代码:asd.php

<?php
//防盗链技术
//先判断是否获取到 $_SERVER['HTTP_REFERER'] 变量
if(isset($_SERVER['HTTP_REFERER'])){
  //判断$_SERVER['HTTP_REFERER']是不是以http://localhost/开始的
  if(strpos($_SERVER['HTTP_REFERER'],"http://localhost")==0){
    echo '<img src="a.png"/>';
  }
  else{
    header("Location:warning.php");//跳转页面到warning.php
    //echo $_SERVER["HTTP_REFERER"];
  }
}
else {
  header("Location:warning.php");
}
?>

warning.php

<html>
<b>倒链</b>
</html>

防盗链验证代码

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="http://localhost/wml/asd.php" rel="external nofollow" >验证防盗链</a>
</body>
</html>

上面是理解原理

一般通过配置服务器防盗链,如nginx配置访问

(gif|jpg|jpeg|png|bmp|swf) 等文件的白名单

具体配置可百度搜索

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php5编程中的异常处理详细方法介绍
Jul 29 PHP
PHP编码转换函数 自动转换字符集支持数组转换
Dec 16 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
Jul 03 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
Dec 25 PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
Jul 01 PHP
在win7中搭建Linux+PHP 开发环境
Oct 08 PHP
PHP 正则表达式小结
Feb 12 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
Oct 22 PHP
PHP表单验证内容是否为空的实现代码
Nov 14 PHP
thinkPHP5分页功能实现方法分析
Oct 25 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
Sep 29 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 #PHP
php 删除指定文件夹的实例讲解
Jul 25 #PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 #PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 #PHP
PHP实现的登录页面信息提示功能示例
Jul 24 #PHP
PHP检查网站是否宕机的方法示例
Jul 24 #PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 #PHP
You might like
如何用C语言编写PHP扩展的详解
2013/06/13 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
php字符串函数学习之substr()
2015/03/27 PHP
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
js判断浏览器类型的方法
2013/08/07 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
jQuery实现的Div窗口震动特效
2014/06/09 Javascript
js实现图片缓慢放大缩小效果
2016/08/02 Javascript
简单理解vue中Props属性
2016/10/27 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
2017/03/09 Javascript
JS模拟超市简易收银台小程序代码解析
2017/08/18 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
vue中$refs的用法及作用详解
2018/04/24 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
举例讲解Django中数据模型访问外键值的方法
2015/07/21 Python
在主机商的共享服务器上部署Django站点的方法
2015/07/22 Python
python下如何查询CS反恐精英的服务器信息
2017/01/17 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
django 实现电子支付功能的示例代码
2018/07/25 Python
Django视图类型总结
2021/02/17 Python
亚洲最大旅游体验平台:KKday
2017/10/21 全球购物
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
阿姆斯特丹城市卡:Amsterdam Pass
2019/12/01 全球购物
信用社主任竞聘演讲稿
2014/05/23 职场文书
小学教师培训方案
2014/06/09 职场文书
施工员岗位职责
2015/02/10 职场文书
农村婚礼司仪主持词
2015/06/29 职场文书
小学班级管理心得体会
2016/01/07 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL