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 无限级 SelectTree 类
May 19 PHP
PHP使用CURL实现多线程抓取网页
Apr 30 PHP
PHP SplObjectStorage使用实例
May 12 PHP
php随机显示指定文件夹下图片的方法
Jul 13 PHP
PHP7+Nginx的配置与安装教程详解
May 10 PHP
一个简单的php路由类
May 29 PHP
深入解析PHP中SESSION反序列化机制
Mar 01 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
PHP实现类似题库抽题效果
Aug 16 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 PHP
为你的 Laravel 验证器加上多验证场景的实现
Apr 07 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
Aug 20 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中Memcache操作类及用法实例
2014/12/12 PHP
php表单提交与$_POST实例分析
2015/01/26 PHP
一段实用的php验证码函数
2016/05/19 PHP
PHP实现文件下载【实例分享】
2017/04/28 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
JS 遮照层实现代码
2010/03/31 Javascript
jquery对元素拖动排序示例
2014/01/16 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
2016/06/03 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
jQuery操作json常用方法示例
2017/01/04 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例
2019/03/30 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
2020/07/22 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
2021/01/03 Vue.js
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
Python获取apk文件URL地址实例
2013/11/01 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
python实现三维拟合的方法
2018/12/29 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
2020/04/23 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
大学生村官任职感言
2014/01/09 职场文书
小学清明节活动方案
2014/03/08 职场文书
竞选班干部演讲稿600字
2014/08/20 职场文书
2015年社区工作总结
2015/04/08 职场文书
经济纠纷起诉状
2015/05/20 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
导游词之江南周庄
2019/12/06 职场文书
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL