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 相关文章推荐
dedecms中常见问题修改方法总结
Mar 21 PHP
PHP 实现多服务器共享 SESSION 数据
Aug 15 PHP
php radio 单选框获取与保持值的实现代码
May 15 PHP
Php Ctemplate引擎开发相关内容
Mar 03 PHP
Thinkphp模板中使用自定义函数的方法
Sep 23 PHP
ThinkPHP CURD方法之field方法详解
Jun 18 PHP
PHP数组操作――获取数组最后一个值的方法
Apr 14 PHP
php curl请求信息和返回信息设置代码实例
Apr 27 PHP
PHP简单计算两个时间差的方法示例
Jun 20 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 PHP
详解关于php的xdebug配置(编辑器vscode)
Jan 29 PHP
php设计模式之工厂模式用法经典实例分析
Sep 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
有关phpmailer的详细介绍及使用方法
2013/01/28 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
基于jQuery图片平滑连续滚动插件
2009/04/27 Javascript
JavaScript 比较时间大小的代码
2010/04/24 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
jquery文档操作wrap()方法实例简述
2015/01/10 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
2016/01/27 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
python控制台英汉汉英电子词典
2020/04/23 Python
python模拟登录并且保持cookie的方法详解
2017/04/04 Python
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
2018/05/30 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
python通过cython加密代码
2020/12/11 Python
Django2.1.7 查询数据返回json格式的实现
2020/12/29 Python
Java里面有没有全局变量?为什么?
2015/02/06 面试题
领导干部对照检查材料
2014/08/24 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
重阳节慰问信
2015/02/15 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android
golang语言指针操作
2022/04/14 Golang
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers