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 相关文章推荐
破解.net程序(dll文件)编译和反编译方法
Jan 31 PHP
一个简单的php加密解密函数(动态加密)
Jun 19 PHP
win7下memCache的安装过程(具体操作步骤)
Jun 28 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
May 10 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
PHP将HTML转换成文本的实现代码
Jan 21 PHP
PHP 绘制网站登录首页图片验证码
Apr 12 PHP
Yii2 中实现单点登录的方法
Mar 09 PHP
PHP实现断点续传乱序合并文件的方法
Sep 06 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
Sep 29 PHP
Laravel 之url参数,获取路由参数的例子
Oct 21 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 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
linux下 C语言对 php 扩展
2008/12/14 PHP
UTF8编码内的繁简转换的PHP类
2009/07/09 PHP
使用php判断网页是否gzip压缩
2013/06/25 PHP
PHP中使用TCPDF生成PDF文档实例
2014/07/01 PHP
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
js获取html参数及向swf传递参数应用介绍
2013/02/18 Javascript
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
javascript HTML+CSS实现经典橙色导航菜单
2016/02/16 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
2017/03/25 Javascript
Vue+Element实现动态生成新表单并添加验证功能
2019/05/23 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
Python获取apk文件URL地址实例
2013/11/01 Python
Python异常处理总结
2014/08/15 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
python中对数据进行各种排序的方法
2019/07/02 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
pandas DataFrame运算的实现
2020/06/14 Python
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
Java面试题:为什么要用Java
2012/05/11 面试题
小班上学期评语
2014/05/05 职场文书
个人安全生产承诺书
2014/05/22 职场文书
建筑节能汇报材料
2014/08/22 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
高三语文教学反思
2016/02/16 职场文书
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL
mysql如何配置白名单访问
2021/06/30 MySQL