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实现浏览器点击下载TXT文档的方法详解
Jun 02 PHP
PHP中Memcache操作类及用法实例
Dec 12 PHP
PHP中的socket_read和socket_recv区别详解
Feb 09 PHP
PHP微信红包API接口
Dec 05 PHP
PHP按指定键值对二维数组进行排序的方法
Dec 22 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
Jan 07 PHP
thinkPHP5.0框架简单配置作用域的方法
Mar 17 PHP
Yii2选项卡的简单使用
May 26 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
php+redis实现商城秒杀功能
Nov 19 PHP
PHP封装的分页类与简单用法示例
Feb 25 PHP
Laravel配合jwt使用的方法实例
Oct 25 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扩展介绍与开发教程
2010/08/19 PHP
laravel 框架实现无限级分类的方法示例
2019/10/31 PHP
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
jquery.ui.draggable中文文档
2009/11/24 Javascript
THREE.JS入门教程(5)你应当知道的十件事
2013/01/24 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
Form表单上传文件(type=&quot;file&quot;)的使用
2017/08/03 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
jQuery实现的点击图片居中放大缩小功能示例
2019/01/16 jQuery
js如何获取图片url的Blob值并预览示例代码
2019/03/07 Javascript
vue使用websocket的方法实例分析
2019/06/22 Javascript
JS如何生成动态列表
2020/09/22 Javascript
[04:32]DOTA2著名解说配音敌法师 现场专访海涛怒切假腿
2013/12/20 DOTA
[01:22:42]2014 DOTA2华西杯精英邀请赛 5 24 DK VS LGD
2014/05/26 DOTA
[15:23]教你分分钟做大人:虚空假面
2014/10/30 DOTA
Python实现的检测网站挂马程序
2014/11/30 Python
python 读写、创建 文件的方法(必看)
2016/09/12 Python
Python中pygal绘制雷达图代码分享
2017/12/07 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
办公室副主任岗位职责
2013/11/25 职场文书
小型女装店的创业计划书
2014/01/09 职场文书
新浪微博实习心得体会
2014/01/27 职场文书
党员干部承诺书范文
2014/03/25 职场文书
诚信考试承诺书
2014/03/27 职场文书
晋江市委常委班子四风问题整改工作方案
2014/10/26 职场文书
培根随笔读书笔记
2015/07/01 职场文书