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 Cookie的一个使用注意点
Nov 08 PHP
php 文件状态缓存带来的问题
Dec 14 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
Jun 21 PHP
WordPress中调试缩略图的相关PHP函数使用解析
Jan 07 PHP
PHP Yaf框架的简单安装使用教程(推荐)
Jun 08 PHP
php进程间通讯实例分析
Jul 11 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
php-fpm开启状态统计的方法详解
Jun 23 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
Jun 03 PHP
php使用pecl方式安装扩展操作示例
Aug 12 PHP
php设计模式之适配器模式原理、用法及注意事项详解
Sep 24 PHP
Laravel5.1 框架表单验证操作实例详解
Jan 07 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 删除cookie和浏览器重定向
2009/03/16 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
js 禁用浏览器的后退功能的简单方法
2008/12/10 Javascript
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
JQuery1.4+ Ajax IE8 内存泄漏问题
2010/10/15 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
2014/07/28 Javascript
JavaScript中Date.toSource()方法的使用教程
2015/06/12 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
利用JS实现数字增长
2016/07/28 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
Python get获取页面cookie代码实例
2018/09/12 Python
PyQt5 多窗口连接实例
2019/06/19 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
日语专业毕业生求职信
2013/12/04 职场文书
总经理秘书工作职责
2013/12/26 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
后勤工作个人总结
2015/02/28 职场文书
党风廉政建设个人总结
2015/03/06 职场文书
致运动员赞词
2015/07/22 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
python创建字典及相关管理操作
2022/04/13 Python