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 相关文章推荐
用Socket发送电子邮件(利用需要验证的SMTP服务器)
Oct 09 PHP
图形数字验证代码
Oct 09 PHP
php中用文本文件做数据库的实现方法
Mar 27 PHP
PHP下利用header()函数设置浏览器缓存的代码
Sep 01 PHP
PHP+Mysql+jQuery实现动态展示信息
Oct 08 PHP
php中apc缓存使用示例
Dec 25 PHP
php获取网页中图片、DIV内容的简单方法
Jun 19 PHP
详解PHP数组赋值方法
Nov 07 PHP
php编程每天必学之验证码
Mar 03 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
实现PHP中session存储及删除变量
Oct 15 PHP
PHP中->和=>的意思
Mar 31 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版)
2006/10/09 PHP
基于Laravel 多个中间件的执行顺序详解
2019/10/21 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
2020/10/20 PHP
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
Angular6新特性之Angular Material
2018/12/28 Javascript
vue elementUI table 自定义表头和行合并的实例代码
2019/05/22 Javascript
小程序中this.setData的使用和注意事项
2019/08/28 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
解决python 上传图片限制格式问题
2019/10/30 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
2019/11/07 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
Python requests模块cookie实例解析
2020/04/14 Python
检测浏览器对HTML5和CSS3支持度的方法
2015/06/25 HTML / CSS
香港化妆品经销商:我的公主
2016/08/05 全球购物
美国精油公司:Plant Therapy
2019/05/17 全球购物
资深财务管理人员自我评价
2013/09/22 职场文书
应届毕业生求职信
2013/11/30 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
会计工作决心书
2014/03/11 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
大学辅导员述职报告
2015/01/10 职场文书
钱学森电影观后感
2015/06/04 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书
JS Canvas接口和动画效果大全
2021/04/29 Javascript
CSS实现单选折叠菜单功能
2021/11/01 HTML / CSS