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 10 PHP
php 数组的指针操作实现代码
Feb 08 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
Jun 13 PHP
PHP把数字转成人民币大写的函数分享
Jun 30 PHP
php上传图片客户端和服务器端实现方法
Mar 30 PHP
php封装的表单验证类完整实例
Oct 19 PHP
PHP数组内存利用率低和弱类型详细解读
Aug 10 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 PHP
PHP模版引擎原理、定义与用法实例
Mar 29 PHP
Laravel框架查询构造器简单示例
May 08 PHP
PHP下用Swoole实现Actor并发模型的方法
Jun 12 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判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
通过缓存数据库结果提高PHP性能的原理介绍
2012/09/05 PHP
php遍历CSV类实例
2015/04/14 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
2015/09/22 PHP
PHP中常见的缓存技术实例分析
2015/09/23 PHP
php+redis实现多台服务器内网存储session并读取示例
2017/01/12 PHP
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
通过javascript设置css属性的代码
2009/12/28 Javascript
修改file按钮的默认样式实现代码
2013/04/23 Javascript
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
js post提交调用方法
2014/02/12 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
常用的JavaScript模板引擎介绍
2015/02/28 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
js实现添加删除表格(两种方法)
2017/04/27 Javascript
简单的网页广告特效实例
2017/08/19 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
解决python报错MemoryError的问题
2018/06/26 Python
Python装饰器基础概念与用法详解
2018/12/22 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
一句话工作感言
2014/03/01 职场文书
寒假家长评语大全
2014/04/16 职场文书
社区平安建设汇报材料
2014/08/14 职场文书
个人四风对照检查材料
2014/09/26 职场文书
2014年医院工作总结
2014/11/20 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
2016年元旦主持词
2015/07/06 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
MySQL学习必备条件查询数据
2022/03/25 MySQL
Hive日期格式转换方法总结
2022/06/25 数据库