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与XML的PDF文档生成技术
Oct 09 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
yii框架中的Url生产问题小结
Jan 16 PHP
PHP编码规范的深入探讨
Jun 06 PHP
JavaScript创建命名空间的5种写法
Jun 24 PHP
PHP自定session保存路径及删除、注销与写入的方法
Nov 18 PHP
php使用NumberFormatter格式化货币的方法
Mar 21 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
Jan 28 PHP
php ajax异步读取rss文档数据
Mar 29 PHP
PHP中strpos、strstr和stripos、stristr函数分析
Jun 11 PHP
PHP框架自动加载类文件原理详解
Jun 06 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 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时间戳使用实例代码
2008/06/07 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
基于Discuz security.inc.php代码的深入分析
2013/06/03 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
2015/01/13 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
PHP创建XML接口示例
2019/07/04 PHP
PHP 图片处理
2020/09/16 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
jquery 选项卡效果 新手代码
2011/07/08 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
JavaScript设置首页和收藏页面的小例子
2013/11/11 Javascript
js点击button按钮跳转到另一个新页面
2014/10/10 Javascript
jQuery设计思想
2017/03/07 Javascript
jQuery轻松实现无缝轮播效果
2017/03/22 jQuery
jQuery实现的导航条点击后高亮显示功能示例
2019/03/04 jQuery
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
举例详解Python中循环语句的嵌套使用
2015/05/14 Python
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
python中int与str互转方法
2018/07/02 Python
浅析Python函数式编程
2018/10/06 Python
Python 多线程其他属性以及继承Thread类详解
2019/08/28 Python
Python实现基于socket的udp传输与接收功能详解
2019/11/15 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
Python-opencv 双线性插值实例
2020/01/17 Python
python 3.8.3 安装配置图文教程
2020/05/21 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
2020/06/11 Python
建筑专业毕业生推荐信
2013/11/21 职场文书
党的群众路线专项整治方案
2014/11/03 职场文书
参观监狱警示教育心得体会
2016/01/15 职场文书