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脚本的10个技巧(1)
Oct 09 PHP
php 用checkbox一次性删除多条记录的方法
Feb 23 PHP
探讨如何把session存入数据库
Jun 07 PHP
php使用curl存储cookie的示例
Mar 31 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
Jul 10 PHP
php中instanceof 与 is_a()区别分析
Mar 03 PHP
twig里使用js变量的方法
Feb 05 PHP
PHP中调用C/C++制作的动态链接库的教程
Mar 10 PHP
Ubuntu上安装yaf扩展的方法
Jan 29 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
php实现数组重复数字统计实例
Sep 30 PHP
php和nginx交互实例讲解
Sep 24 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 cookie 登录验证示例代码
2009/03/16 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
php无限极分类实现的两种解决方法
2013/04/28 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
2017/03/28 PHP
PHP替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
在Python web中实现验证码图片代码分享
2017/11/09 Python
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
Python绘制正余弦函数图像的方法
2018/08/28 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
python+mysql实现教务管理系统
2019/02/20 Python
python tkinter实现屏保程序
2019/07/30 Python
python对csv文件追加写入列的方法
2019/08/01 Python
ipad上运行python的方法步骤
2019/10/12 Python
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
高级人员简历的自我评价分享
2013/11/03 职场文书
西式结婚主持词
2014/03/14 职场文书
办理护照工作证明
2014/10/10 职场文书
运动会广播稿300字
2015/08/19 职场文书
纪律委员竞选稿
2015/11/19 职场文书
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python
Pygame Draw绘图函数的具体使用
2021/11/17 Python