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 接口类与抽象类的实际作用
Nov 26 PHP
PHP 面向对象 PHP5 中的常量
May 05 PHP
php继承的一个应用
Sep 06 PHP
PHP使用DES进行加密与解密的方法详解
Jun 06 PHP
php无限分类且支持输出树状图的详细介绍
Jun 19 PHP
PHP时间格式控制符对照表分享
Jul 23 PHP
PHP中substr()与explode()函数用法分析
Nov 24 PHP
完整删除ecshop中获取店铺信息的API
Dec 24 PHP
php 中奖概率算法实现代码
Jan 25 PHP
php中通过eval实现字符串格式的计算公式
Mar 18 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
Oct 16 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 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跨时区(UTC时间)应用解决方案
2013/01/11 PHP
php批量删除数据库下指定前缀的表以prefix_为例
2014/08/24 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
javascript Ext JS 状态默认存储时间
2009/02/15 Javascript
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
让你的网站可编辑的实现js代码
2009/10/19 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
jquery点击缩略图切换视频播放特效代码分享
2015/09/15 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
2017/10/19 Javascript
bootstrap-Treeview实现级联勾选
2017/11/23 Javascript
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
vue click.stop阻止点击事件继续传播的方法
2018/09/04 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
2019/04/11 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
python实现文件名批量替换和内容替换
2014/03/20 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
解决python 文本过滤和清理问题
2019/08/28 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
CentOS 7如何实现定时执行python脚本
2020/06/24 Python
Django vue前后端分离整合过程解析
2020/11/20 Python
家具厂厂长岗位职责
2014/01/01 职场文书
工作决心书范文
2014/03/11 职场文书
餐饮投资计划书
2014/04/25 职场文书
党的群众路线教育实践活动学习计划
2014/11/03 职场文书
学习保证书100字
2015/02/26 职场文书
新员工试用期自我评价
2015/03/10 职场文书
求职信范文怎么写
2015/03/19 职场文书
Python使用PyYAML库读写yaml文件的方法
2022/04/06 Python