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 09 PHP
php入门之连接mysql数据库的一个类
Apr 21 PHP
探讨:如何通过stats命令分析Memcached的内部状态
Jun 14 PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 PHP
php轻量级的性能分析工具xhprof的安装使用
Aug 12 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
Sep 20 PHP
PHP+JS三级菜单联动菜单实现方法
Feb 24 PHP
php实现学生管理系统
Mar 21 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
PDO操作MySQL的基础教程(推荐)
Aug 18 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
Laravel框架FormRequest中重写错误处理的方法
Feb 18 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
一个改进的UBB类
2006/10/09 PHP
在php和MySql中计算时间差的方法
2011/04/22 PHP
PHP数组循环操作详细介绍 附实例代码
2013/02/03 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
php 判断页面或图片是否经过gzip压缩的方法
2017/04/05 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
Javascript 自定义类型方法小结
2010/03/02 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
Javascript实现鼠标框选操作  不是点击选取
2016/04/14 Javascript
JS碰撞运动实现方法详解
2016/12/15 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
2019/05/10 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
2020/08/27 Javascript
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
教大家使用Python SqlAlchemy
2016/02/12 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
Python中logging日志记录到文件及自动分割的操作代码
2020/08/05 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
公司员工的自我评价范例
2013/11/01 职场文书
工地安全质量标语
2014/06/07 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
优秀小学生事迹材料
2014/12/26 职场文书
表扬稿格式范文
2015/01/16 职场文书
单位接收函范文
2015/01/30 职场文书
详解PHP Swoole与TCP三次握手
2021/05/27 PHP