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 Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
深入PHP变量存储的详解
Jun 13 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 PHP
在Windows系统下使用PHP生成Word文档的教程
Jul 03 PHP
php简单判断文本编码的方法
Jul 30 PHP
php ci 获取表单中多个同名input元素值的代码
Mar 25 PHP
golang与PHP输出excel示例
Jul 22 PHP
yii通过小物件生成view的方法
Oct 08 PHP
PHP封装的多文件上传类实例与用法详解
Feb 07 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
Aug 03 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
Oct 11 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批量检测并去除文件BOM头代码实例
2014/05/08 PHP
Yii2.0中的COOKIE和SESSION用法
2016/08/12 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
2016/05/26 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
微信小程序 教程之wxapp视图容器 swiper
2016/10/19 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
仿淘宝JSsearch搜索下拉深度用法
2018/01/15 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
angular中如何绑定iframe中src的方法
2019/02/01 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
2019/06/24 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
2019/11/10 Javascript
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
python中的全局变量用法分析
2015/06/09 Python
Python实现统计文本文件字数的方法
2017/05/05 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
flask session组件的使用示例
2018/12/25 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
html5 div布局与table布局详解
2016/11/16 HTML / CSS
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
倡议书格式
2014/08/30 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
离婚纠纷代理词
2015/05/23 职场文书
MySQL 存储过程的优缺点分析
2021/05/20 MySQL
分享3个非常实用的 Python 模块
2022/03/03 Python