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 相关文章推荐
在PWS上安装PHP4.0正式版
Oct 09 PHP
php 文件上传代码(限制jpg文件)
Jan 05 PHP
php简单的会话类代码
Aug 08 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
Aug 04 PHP
php实现根据url自动生成缩略图的方法
Sep 23 PHP
php生成excel列名超过26列大于Z时的解决方法
Dec 29 PHP
Mac OS下配置PHP+MySql环境
Feb 25 PHP
四个PHP非常实用的功能
Sep 29 PHP
PHP全局变量与超级全局变量区别分析
Apr 01 PHP
PHP封装的MSSql操作类完整实例
May 26 PHP
PHP字典树(Trie树)定义与实现方法示例
Oct 09 PHP
详解php与ethereum客户端交互
Apr 28 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下清空字符串中的HTML标签的代码
2010/09/06 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
Yii2基于Ajax自动获取表单数据的方法
2016/08/10 PHP
总结对比php中的多种序列化
2016/08/28 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
2019/10/25 PHP
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
javascript parseInt 函数分析(转)
2009/03/21 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
javascript实现二级级联菜单的简单制作
2015/11/19 Javascript
轻松实现Bootstrap图片轮播
2020/04/20 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
原生js实现轮播图
2017/02/27 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
Python 迭代器工具包【推荐】
2016/05/06 Python
Python多线程扫描端口代码示例
2018/02/09 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
普通大学毕业生自荐信范文
2014/02/23 职场文书
法人授权委托书
2014/04/03 职场文书
职务说明书范文
2014/05/07 职场文书
公司活动总结范文
2014/07/01 职场文书
2014教师党员个人自我评议
2014/09/20 职场文书
招商引资工作汇报
2014/10/28 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
消费者投诉书范文
2015/07/02 职场文书
SQLServer2019 数据库的基本使用之图形化界面操作的实现
2021/04/08 SQL Server
MongoDB连接数据库并创建数据等使用方法
2021/11/27 MongoDB