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开发的一些注意点总结
Oct 12 PHP
php解压文件代码实现php在线解压
Feb 13 PHP
php实现文件下载简单示例(代码实现文件下载)
Mar 10 PHP
PHP实现懒加载的方法
Mar 07 PHP
php动态绑定变量的用法
Jun 16 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
Mar 14 PHP
PHP的自定义模板引擎
Mar 24 PHP
php插件Xajax使用方法详解
Aug 31 PHP
简单实现php上传文件功能
Sep 21 PHP
PHP常见字符串操作函数与用法总结
Mar 04 PHP
laravel 事件/监听器实例代码
Apr 12 PHP
使用composer命令加载vendor中的第三方类库 的方法
Jul 09 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使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
让iframe框架网页在任何浏览器下自动伸缩
2006/08/18 Javascript
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
JS实现根据出生年月计算年龄
2014/01/10 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
2015/09/09 Javascript
第六章之辅组类与响应式工具
2016/04/25 Javascript
jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍
2016/09/01 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
vue组件与复用详解
2018/04/08 Javascript
Webpack的dll功能使用
2018/06/28 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
[08:53]DOTA2每周TOP10 精彩击杀集锦vol.9
2014/06/26 DOTA
用python实现面向对像的ASP程序实例
2014/11/10 Python
介绍Python中的__future__模块
2015/04/27 Python
python绘制多个曲线的折线图
2020/03/23 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
Flask-WTF表单的使用方法
2019/07/12 Python
《开国大典》教学反思
2014/04/19 职场文书
励志广播稿300字(5篇)
2014/09/15 职场文书
战略性融资合作协议书范本
2014/10/17 职场文书
2014年信息中心工作总结
2014/12/17 职场文书
党员个人党性分析材料
2014/12/18 职场文书
办公用品质量保证书
2015/05/11 职场文书
SQL Server——索引+基于单表的数据插入与简单查询【1】
2021/04/05 SQL Server
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫
Netty分布式客户端接入流程初始化源码分析
2022/03/25 Java/Android