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 相关文章推荐
PHP函数utf8转gb2312编码
Dec 21 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
Jun 17 PHP
实用的简单PHP分页集合包括使用方法
Oct 21 PHP
PHP生成压缩文件实例
Feb 07 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
Jan 04 PHP
php实现的http请求封装示例
Nov 08 PHP
php实现文件与16进制相互转换的方法示例
Feb 16 PHP
PHP中error_reporting函数用法详细介绍
Jun 11 PHP
在 Laravel 项目中使用 webpack-encore的方法
Jul 21 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
Dec 02 PHP
Thinkphp集成抖音SDK的实现方法
Apr 28 PHP
Yii 实现数据加密和解密
Mar 09 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
PHP学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
laravel 获取某个查询的查询SQL语句方法
2019/10/12 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
2014/05/04 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
angularJS提交表单(form)
2015/02/09 Javascript
Bootstrap每天必学之模态框(Modal)插件
2016/04/26 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
使用Node.js实现RESTful API的示例
2017/08/01 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
2017/10/20 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
微信小程序云开发之模拟后台增删改查
2019/05/16 Javascript
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
python定时检查某个进程是否已经关闭的方法
2015/05/20 Python
由浅入深讲解python中的yield与generator
2017/04/05 Python
Python collections模块使用方法详解
2019/08/28 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
Django admin管理工具TabularInline类用法详解
2020/05/14 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
Kathmandu美国网站:新西兰户外运动品牌
2019/03/23 全球购物
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
什么是View State?
2013/01/27 面试题
别名指示符是什么
2012/10/08 面试题
营业经理岗位职责
2013/11/10 职场文书
九年级数学教学反思
2014/02/02 职场文书
预备党员入党自我评价范文
2014/03/10 职场文书
文化建设工作方案
2014/05/12 职场文书
南京大屠杀观后感
2015/06/02 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书