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中的内存管理问题
Aug 31 PHP
ThinkPHP CURD方法之table方法详解
Jun 18 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
Aug 20 PHP
php用户注册信息验证正则表达式
Nov 12 PHP
Yii2实现让关联字段支持搜索功能的方法
Aug 10 PHP
Laravel中间件实现原理详解
Oct 09 PHP
php中namespace及use用法分析
Dec 06 PHP
PHP MYSQL简易交互式站点开发
Dec 27 PHP
利用php的ob缓存机制实现页面静态化方法
Jul 09 PHP
php高清晰度无损图片压缩功能的实现代码
Dec 09 PHP
laravel按天、按小时,查询数据的实例
Oct 09 PHP
基于PHP实现发微博动态代码实例
Dec 11 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
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
php设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
php读取和保存base64编码的图片内容
2017/04/22 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
vue下跨域设置的相关介绍
2017/08/26 Javascript
three.js中3D视野的缩放实现代码
2017/11/16 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
2018/09/16 Javascript
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
创建nuxt.js项目流程图解
2020/03/13 Javascript
Vue 同步异步存值取值实现案例
2020/08/05 Javascript
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
Django ORM 查询管理器源码解析
2019/08/05 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
如何在存储过程中使用Loop
2016/01/05 面试题
生物化工专业个人自荐信
2013/09/26 职场文书
大学班长的职责
2014/01/27 职场文书
爱心捐助倡议书
2014/05/19 职场文书
社区护士演讲稿
2014/08/27 职场文书
结婚老公保证书
2015/02/26 职场文书
美丽人生观后感
2015/06/03 职场文书
大学生读书笔记大全
2015/07/01 职场文书
Python中的 enumerate和zip详情
2022/05/30 Python