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 随机数的深入理解
Jun 05 PHP
深入理解curl类,可用于模拟get,post和curl下载
Jun 08 PHP
Php连接及读取和写入mysql数据库的常用代码
Aug 11 PHP
yii的CURD操作实例详解
Dec 04 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
Aug 19 PHP
php版微信自动获取收货地址api用法示例
Sep 22 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
Jul 19 PHP
详解PHP防止直接访问.php 文件的实现方法
Jul 28 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
Sep 29 PHP
phpinfo无法显示的原因及解决办法
Feb 15 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
Oct 21 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 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编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
PHP获取当前完整URL地址的函数
2014/12/21 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
2015/06/29 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
2016/07/21 PHP
PHP数组相加操作及与array_merge的区别浅析
2016/11/26 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
3Z版基于jquery的图片复选框(asp.net+jquery)
2010/04/12 Javascript
jquery的extend和fn.extend的使用说明
2011/01/09 Javascript
浅析tr的隐藏和显示问题
2014/03/05 Javascript
node.js中使用node-schedule实现定时任务实例
2014/06/03 Javascript
jQuery中用dom操作替代正则表达式
2014/12/29 Javascript
Jquery实现textarea根据文本内容自适应高度
2015/04/03 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
js转换对象为xml
2017/02/17 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
在Js页面通过POST传递参数跳转到新页面详解
2017/08/25 Javascript
JS实现websocket长轮询实时消息提示的效果
2017/10/10 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
2019/01/03 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
[01:57]2018年度DOTA2最具潜力解说-完美盛典
2018/12/16 DOTA
快速解决安装python没有scripts文件夹的问题
2018/04/03 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
Pytorch的mean和std调查实例
2020/01/02 Python
爱普生美国官网:Epson美国
2018/11/05 全球购物
PHP面试题及答案二
2015/05/23 面试题
父亲追悼会答谢词
2014/01/17 职场文书
领导个人查摆剖析材料
2014/10/29 职场文书
工作时间调整通知
2015/04/24 职场文书
罗马假日观后感
2015/06/08 职场文书
十八大观后感
2015/06/12 职场文书
党员公开承诺书2016
2016/03/24 职场文书