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来实现网络服务
Sep 15 PHP
php将fileterms函数返回的结果变成可读的形式
Apr 21 PHP
PHP四大安全策略
Mar 12 PHP
PHP对文件夹递归执行chmod命令的方法
Jun 19 PHP
PHP防止刷新重复提交页面的示例代码
Nov 11 PHP
微信获取用户地理位置信息的原理与步骤
Nov 12 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
Nov 27 PHP
Yii框架实现邮箱激活的方法【数字签名】
Oct 18 PHP
Laravel中任务调度console使用方法小结
May 07 PHP
PHP实现上传多图即时显示与即时删除的方法
May 09 PHP
PHP ADODB实现分页功能简单示例
May 25 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中使用excel的简单介绍
2013/08/02 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
PHP SESSION跨页面传递失败解决方案
2020/12/11 PHP
jquery 简短右键菜单 多浏览器兼容
2010/01/01 Javascript
jQuery 源码分析笔记(4) Ready函数
2011/06/02 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
setTimeout自动触发一个js的方法
2014/01/15 Javascript
JavaScript知识点整理
2015/12/09 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
浅谈TypeScript的类型保护机制
2020/02/23 Javascript
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python实现截屏的函数
2015/07/25 Python
Python中list初始化方法示例
2016/09/18 Python
Python爬虫实战:分析《战狼2》豆瓣影评
2018/03/26 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
2019/08/13 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
python3跳出一个循环的实例操作
2020/08/18 Python
DRF框架API版本管理实现方法解析
2020/08/21 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
AmazeUI的下载配置与Helloworld的实现
2020/08/19 HTML / CSS
S’well Bottle保温杯官网:绝缘不锈钢水瓶
2018/05/09 全球购物
《湘夫人》教学反思
2014/02/21 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
民事起诉书范本
2015/05/19 职场文书
2015年检察院个人工作总结
2015/05/20 职场文书
致毕业季:你如何做好自己的职业生涯规划书?
2019/07/01 职场文书
nginx location优先级的深入讲解
2021/03/31 Servers
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang
Python first-order-model实现让照片动起来
2022/06/25 Python