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 相关文章推荐
用session做客户验证时的注意事项
Oct 09 PHP
php empty,isset,is_null判断比较(差异与异同)
Oct 19 PHP
PHP游戏编程25个脚本代码
Feb 08 PHP
php的$_FILES的临时储存文件与回收机制实测过程
Jul 12 PHP
php操作mysqli(示例代码)
Oct 28 PHP
destoon复制新模块的方法
Jun 21 PHP
php中current、next与reset函数用法实例
Nov 17 PHP
Yii框架中memcache用法实例
Dec 03 PHP
php使用number_format函数截取小数的方法分析
May 27 PHP
Smarty日期时间操作方法示例
Nov 15 PHP
PHP实现权限管理功能示例
Sep 22 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
Jul 21 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时单元格内换行问题的解决方法
2010/08/26 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
基于PHP实现短信验证码接口(容联运通讯)
2016/09/06 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
javascript实时显示当天日期的方法
2015/05/20 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
2015/11/01 Javascript
跟我学习javascript的严格模式
2015/11/16 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
jQuery处理XML文件的几种方法
2016/06/14 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
jQuery EasyUi 验证功能实例解析
2017/01/06 Javascript
详解Angular CLI + Electron 开发环境搭建
2017/07/20 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
python生成随机mac地址的方法
2015/03/16 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
PyCharm代码格式调整方法
2018/05/23 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
HTML5仿微信聊天界面、微信朋友圈实例代码
2018/01/29 HTML / CSS
Melijoe英国官网:法国儿童时尚网站
2016/11/18 全球购物
绍兴鲁迅故居导游词
2015/02/09 职场文书
运动会闭幕式主持词
2015/07/01 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
赡养老人协议书范本
2015/08/06 职场文书
小学大队干部竞选稿
2015/11/20 职场文书
goland设置颜色和字体的操作
2021/05/05 Golang
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python