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在XP下IIS和Apache2服务器上的安装
Sep 05 PHP
杏林同学录(五)
Oct 09 PHP
PHP iconv 解决utf-8和gb2312编码转换问题
Apr 12 PHP
如何用phpmyadmin设置mysql数据库用户的权限
Jan 09 PHP
PHP中操作ini配置文件的方法
Apr 25 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
Oct 10 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
May 28 PHP
php结合ajax实现手机发红包的案例
Oct 13 PHP
tp5实现微信小程序多图片上传到服务器功能
Jul 16 PHP
laravel实现上传图片的两种方式小结
Oct 12 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
Apr 14 PHP
php实例化对象的实例方法
Nov 17 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重定向的3种方式
2013/03/07 PHP
使用PHP接收POST数据,解析json数据
2013/06/28 PHP
orm获取关联表里的属性值
2016/04/17 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
Laravel创建数据库表结构的例子
2019/10/09 PHP
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
jquery中animate动画积累的解决方法
2013/10/05 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
python的即时标记项目练习笔记
2014/09/18 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
Python探索之自定义实现线程池
2017/10/27 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
基于pytorch的保存和加载模型参数的方法
2019/08/17 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
Python之变量类型和if判断方式
2020/05/05 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
关于Python错误重试方法总结
2021/01/03 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
.NET面试题:什么是反射
2016/09/30 面试题
大学生创业计划书的格式要求
2013/12/29 职场文书
专业技术职务聘任书
2014/03/29 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL
Django rest framework如何自定义用户表
2021/06/09 Python