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 和 MySQL 基础教程(二)
Oct 09 PHP
Access数据库导入Mysql的方法之一
Oct 09 PHP
PHP4与PHP3中一个不兼容问题的解决方法
Oct 09 PHP
PHP设计模式之装饰者模式
Feb 29 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
Feb 17 PHP
php使用curl和正则表达式抓取网页数据示例
Apr 13 PHP
destoon设置自定义搜索的方法
Jun 21 PHP
php返回当前日期或者指定日期是周几
May 21 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 PHP
php中bind_param()函数用法分析
Mar 28 PHP
PHP实现链表的定义与反转功能示例
Jun 09 PHP
PHP 实现重载
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转换IP地址到真实地址的方法详解
2013/06/09 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
PHP+MySQL实现在线测试答题实例
2020/01/02 PHP
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
2012/10/24 Javascript
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
Bootstrap笔记之缩略图、警告框实例详解
2017/03/09 Javascript
vue.js利用defineProperty实现数据的双向绑定
2017/04/28 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
2020/03/26 Javascript
python实现简单socket通信的方法
2016/04/19 Python
Django之模型层多表操作的实现
2019/01/08 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
Python 定义只读属性的实现方式
2020/03/05 Python
几个判断型的面试题
2012/07/03 面试题
高级护理专业大学生求职信
2013/10/24 职场文书
实习生自荐信范文分享
2013/11/27 职场文书
客服工作职责
2013/12/11 职场文书
幼儿园小班评语大全
2014/04/17 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
会计电算化实训报告
2014/11/04 职场文书
2014年惩防体系建设工作总结
2014/12/01 职场文书
委托书的样本
2015/01/28 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
七一慰问简报
2015/07/20 职场文书
2019个人工作计划书的格式及范文!
2019/07/04 职场文书
Django debug为True时,css加载失败的解决方案
2021/04/24 Python
基于tensorflow权重文件的解读
2021/05/26 Python