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中读取和写入WORD文档的代码
Apr 09 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
Aug 22 PHP
php获取用户IPv4或IPv6地址的代码
Nov 15 PHP
使用PHP Socket 编程模拟Http post和get请求
Nov 25 PHP
php获取百度收录、百度热词及百度快照的方法
Apr 02 PHP
PHP异常处理Exception类
Dec 11 PHP
CI配置多数据库访问的方法
Mar 28 PHP
php实现在线通讯录功能(附源码)
May 13 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
Aug 07 PHP
基于php中echo用逗号和用点号的区别详解
Jan 23 PHP
php反射学习之依赖注入示例
Jun 14 PHP
使用Laravel中的查询构造器实现增删改查功能
Sep 03 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
德劲1104的电路分析与改良
2021/03/01 无线电
PHP脚本的10个技巧(6)
2006/10/09 PHP
推荐个功能齐全的发送PHP邮件类
2007/01/03 PHP
基于PHP Web开发MVC框架的Smarty使用说明
2013/04/19 PHP
PHP+jQuery实现自动补全功能源码
2013/05/15 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
2013/07/03 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
解决PHP里大量数据循环时内存耗尽的方法
2015/10/10 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
js计算精度问题小结
2013/04/22 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
linux系统使用python监测系统负载脚本分享
2014/01/15 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
Python控制键盘鼠标pynput的详细用法
2019/01/28 Python
Python同步遍历多个列表的示例
2019/02/19 Python
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
捷克多品牌在线时尚商店:ANSWEAR.cz
2020/10/03 全球购物
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
社区服务活动小结
2014/07/08 职场文书
元旦晚会活动总结
2014/07/09 职场文书
2014年采购部工作总结
2014/11/20 职场文书
故宫英文导游词
2015/01/31 职场文书
技术支持岗位职责
2015/02/13 职场文书
python内置模块之上下文管理contextlib
2022/06/14 Python
nginx七层负载均衡配置详解
2022/07/15 Servers
Java Redisson多策略注解限流
2022/09/23 Java/Android