篡改referer_HTTP_REFERER的用法及伪造

引言

在php中,可以使用$_SERVER[‘HTTP_REFERER’]来获取HTTP_REFERER信息,关于HTTP_REFERER,php文档中的描述如下:

“引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改

HTTP_REFERER 的功能。简言之,该值并不可信。 ”

在百度百科中,对于该参数的描述如下:

“HTTP

Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。”

从上面的论述中我们可以得到如下几点结论:

http_referer由浏览器生成,并不是所有浏览器都会设置该值。

http_referer可以伪造,并不可信。

HTTP_REFERER的用途

HTTP_REFERER提供了引导用户代理到当前页的前一页的地址信息,常见的一些应用场景有防盗链,统计文章有多少次是来自谷歌搜索结果,多少次来自百度搜索结果等。

下面以防盗链为例,讲讲HTTP_REFERER的用法。

如果你经常写博客,就一定会遇到盗用你辛辛苦苦整理过的文章不跟你打任何招呼甚至连原文链接都一并抹除的网站,文字这个层面我们没法控制,但是图片这个层面我们是可以控制的。举个例子,如果你也曾复制过一些类似腾讯等网站的文章,你会发现黏贴下来发表之后经常出现图片无法显示,这是如何做到的呢?

场景:a站点的图片全部存储在c站点(云服务器)上,c站点将识别调用方是否来自a站点,否则显示一张错误图片,b站是盗图网站。

a站和b站的代码一致,如下所示:

;

重点是c站的代码,如下所示:

if(file_exists($_GET['fname'])){echo file_get_contents($_GET['fname']);

}

}

这样当a站访问时图片可以正常显示,而b站访问时图片是显示不出来的。

什么时候获取不到HTTP_REFERER值

综上所述,HTTP_REFERER存在需要两个条件:

浏览器(客户端)请求(服务器端请求的情况下,是不存在HTTP_REFERER的,但是可以伪造header,这在下一节中将提及);

存在前导页;

以下是网友收集的获取不到HTTP_REFERER值的情况:

在浏览器内直接敲URL

windows桌面上的超链接图标

浏览器内书签

第三方软件(如Word,Excel等)内容中的链接

SSL认证网站跳入

http://example.com/“> meta页面设置自动跳转时,在example.com将取不到REFERER URL

使用JavaScript的Location.href或者是Location.replace()

在以下情况下可以获取HTTP_REFERER值:

直接用

form提交的表单(POST或GET)

src请求(如js的script标签及html中img标签的src属性)

如何伪造HTTP_REFERER

前面提到HTTP_REFERER是可以伪造的,那么在php中,如何伪造HTTP_REFERER呢?有如下三种方法:

首先是接口代码:

<?php $HTTP_REFERER = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';exit(json_encode(array('status' => 'ok',

'refer' => $HTTP_REFERER)

));

curl

代码示例:

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com');$output = curl_exec($ch);

curl_close($ch);return $output;

}var_dump(curl_post("http://www.c.com/api.php"));

执行结果如下:

伪造成功。

file_get_contents

一直没怎么用过file_get_contents来发送post请求,其实file_get_contents可以发送任何http请求,后期会针对性的整理一篇文章出来。

代码示例:

$opts = array('http'=>array('method'=>"GET",

'header'=>"Referer: http://www.google.com")

);$context = stream_context_create($opts);//Open the file using the HTTP headers set above

var_dump(file_get_contents('http://www.c.com/api.php', false, $context));

执行结果:

伪造成功

socket

代码示例:

$fp = fsockopen("www.c.com", 80, $errno, $errstr, 30);if (!$fp) {echo "$errstr ($errno)
\n";

}else{$out = "GET /api.php HTTP/1.1\r\n";$out .= "Host: www.c.com\r\n";$out .= "Referer: www.google.com\r\n";$out .= "Connection: Close\r\n\r\n";fwrite($fp, $out);while (!feof($fp)) {echo fgets($fp, 128);

}fclose($fp);

}

执行结果:

伪造成功。

在做这次测试的时候,第一次执行报错:Your browser sent a request that this server could not understand.

后来发现是$out = “GET api.php HTTP/1.1\r\n”;中少了’/’,纠结了老半天,晕死

---------------------

原文:https://blog.csdn.net/u011250882/article/details/49679535

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为nova7保密柜_华为发布nova8系列新品 轻松拍出Vlog黄金脸占比

2020年12月23日&#xff0c;华为nova8系列手机正式发布。作为深受年轻人喜爱的手机品牌之一&#xff0c;华为nova8系列此次延续其强大的前置视觉实力、强悍的设计性能以及独特的设计美学&#xff0c;带来业内首款专为Vlog拍摄设计的5G手机。随着短视频和Vlog的崛起&#xff0c;…

从拉格朗日乘数法到KKT条件

从拉格朗日乘数法到KKT条件 最近看论文遇到了Karush–Kuhn–Tucker &#xff08;KKT&#xff09;条件&#xff0c;想搞清楚这是个什么东东&#xff0c;因此就把这个东西认真学习一下并且分享出来&#xff0c;希望对大家有用。学习KKT就不得不先学习一下拉格朗日乘数法&#xf…

26.0.0-alpha1_WildFly 8.0.0.Alpha1的发布和一些历史

26.0.0-alpha1自从我们发布WildFly 8.0.0.Alpha1版本以来&#xff0c; 已经过去了大约2周。 该下载位于WildFly下载页面上 。 我敢肯定&#xff0c;你们中的许多人可能会想知道WildFly是什么&#xff0c;而其中一些知道它是什么的人可能不会知道已经发布了。 我将尝试回答其中的…

单机最大负载_分布式高可靠之负载均衡,今天看了你肯定会

到目前为止&#xff0c;我已经为你介绍了分布式起源、分布式协调与同步、分布式资源管理与负载调度、分布式计算技术、分布式通信技术和分布式数据存储。可以说&#xff0c;掌握了这些内容&#xff0c;基本上就掌握了分布式的关键技术。然而&#xff0c;只有可靠的分布式系统才…

【强化学习】一文带你理清强化学习

整理不易&#xff0c;希望留个赞再走哦&#xff01;&#xff01; 学习路线 这个图描述的比较清晰&#xff0c;蓝框里是整个强化学习的一些概念基础了&#xff0c;橙色是一些学习方法&#xff0c;可以针对性的选择一些&#xff0c;废话不多说&#xff0c;接下来就按照这个路线图…

了解Java缓冲池

了解Java缓冲池 缓冲池空间位于垃圾收集器管理的内存之外。 这是分配本地堆外内存的一种方法。 使用缓冲池有什么好处&#xff1f; 为了回答这个问题&#xff0c;让我们首先了解什么是字节缓冲区。 字节缓冲区 非直接缓冲区 ByteBuffer类附带了java.nio包。 它允许我们分配直接…

java 循环拼接字符串用分号隔开_Java 8中字符串拼接新姿势:StringJoiner

在为什么阿里巴巴不建议在for循环中使用””进行字符串拼接一文中&#xff0c;我们介绍了几种Java中字符串拼接的方式&#xff0c;以及优缺点。其中还有一个重要的拼接方式我没有介绍&#xff0c;那就是Java 8中提供的StringJoiner &#xff0c;本文就来介绍一下这个字符串拼接…

module ‘tensorflow_core.compat.v1‘ has no attribute ‘contrib‘问题的完美解决

问题描述&#xff1a; Instructions for updating: Use keras.layers.Dense instead. Traceback (most recent call last):File "run_cnn.py", line 200, in <module>model TextCNN(config)File "D:\MY DATA\学习资料\研究生\深度学习\text-classificat…

doctrine find的对象转换成数组_「ES6基础」Array数组的新方法(上)

在日常工作中我们经常会与数组打交道&#xff0c;因此需要熟练掌握数组操作的相关方法&#xff0c;ES6中关于数组的操作&#xff0c;又给我们带来了哪些惊喜呢&#xff0c;Array数组操作又添加了哪些新方法&#xff1f;本篇文章将从以下几个方面进行介绍&#xff1a;Array.from…

No module named ‘__main__.common‘; ‘__main__‘ is not a package

今天在调通代码时遇到一个难缠的bug,源代码如下&#xff1a; from .common import _FLOATX, _EPSILON结果报错&#xff1a; 问题原因&#xff1a; 也就是说&#xff0c;这是相对导入&#xff0c;只有在父模块在当前运行环境中被导入过才能用。 这揭示了报错的缘由&#xff0…

spring 异步返回结果_使用Spring Integration聚合异步结果

spring 异步返回结果嗨&#xff0c;我遇到了一个问题&#xff0c;该问题使用Spring Integration解决方案非常好。 很多时候&#xff0c;我们需要一种将消息分发到未知数量的目的地的方案。 为此&#xff0c;我们使用主题方法。 但是有时&#xff0c;我们还希望从收到消息的所有…

ValueError( Shape(4, ?, 1, 20) and () are incompatible

报错&#xff1a; 解决&#xff1a; 将文件中的return tf.concat(axis, tensors) 改为&#xff1a;return tf.concat(tensors, axis)问题完美解决

adadelta算法_对C++用户比较友好的机器学习算法库

由于疫情影响&#xff0c;这几天在家学习编程&#xff0c;整理了基于c语言的机器学习算法库。目前大部分机器学习库都是面向pyhton语言的&#xff0c;尽管很python包的底层语言是c&#xff0c;但c用户使用起来很麻烦&#xff0c;这里整理了一些对c比较优化的机器学习算法库&…

不解析,使用解析对象

将面向对象的后端与外部系统集成的传统方式是通过数据传输对象 &#xff0c;这些对象在外出之前先序列化为JSON&#xff0c;然后在返回时反序列化。 这种方法很流行&#xff0c;而且是错误的。 序列化部分应该由打印机代替&#xff0c;我在前面已经解释过。 这是我对反序列化的…

yaml报错TypeError: load() missing 1 required positional argument: ‘Loader‘

添加一下命令即可&#xff1a; 我的操作&#xff1a; return yaml.load(config)改为 return yaml.full_load(config)问题完美解决

3d制作中需要注意的问题_珠宝首饰工艺篇-戒指3D造型设计制作注意要点

1、戒指的常规手寸数据和戒指外围周长计算公式应用参考如下图&#xff1a;戒指手寸内直径大小说明图1、戒指手寸规格有14号、15号、16号、17号、18号、19号、20号、&#xff0c;但是从开发角度来说比较常见规格是17号18号19号这几种规格比较多&#xff0c;那我们电脑3D建模的时…

微信推送封面尺寸_连封面图都搞不明白,做什么新时代的新媒体人?

嘿&#xff0c;胖友们大家好呀&#xff0c;我是三儿。又是精(bu)神(xiang)满(shang)满(ban)的周一啦&#xff0c;胖友们准备好开始迎接新的一周了吗&#xff01;为了迎接这个崭新的周一&#xff0c;三儿特意为你们准备的一些实用的小工具教学&#xff0c;帮助你们快速的完成工作…

2021总结

去年做了复盘&#xff0c;感觉很良好。以后希望把这个每年复盘一次的习惯能够好好坚持下去&#xff0c;再加上年初的规划就更好啦&#xff01;2021年&#xff0c;比起2020来说&#xff0c;就相对平静了很多&#xff0c;没经历过大风大浪&#xff0c;心智还是有所变化&#xff0…

java queue使用_使用Java使用Amazon Simple Queue Service

java queue使用Amazon Simple Queue Service或SQS是Amazon Webservice堆栈提供的高度可扩展的托管消息队列。 Amazon SQS可用于完全解耦系统内不同组件的操作&#xff0c;这些组件否则将交换数据以执行独立的任务。 Amazon SQS还可以帮助我们保存在应用程序关闭或组件之一不可用…

latex学习篇【一】论文中的图片技巧QA

第一篇论文总算收尾了&#xff0c;整理一波latex写论文的Q&A。 LATEX专栏第一篇&#xff1a;在Latex模板中引入各种图片的问题。 工具&#xff1a;overleaf网站&#xff1a;https://www.overleaf.com/project/60e9ceb20f8db14efa31dc80在overleaf上面插入图片什么形式最好…