HTTP系列之Referer和Referrer policy简介
文章目录
- 1、前言摘要
- 2、Referer简介
- 3、Referer安全性
- 4、相关术语
- 5、Referrer Policy
- 5.1、no-referrer
- 5.2、no-referrer-when-downgrade
- 5.3、same-origin
- 5.4、origin
- 5.5、strict-origin
- 5.6、origin-when-cross-origin
- 5.7、strict-origin-when-cross-origin
- 5.8、unsafe-url
- 5.9、空字符串
- 6、Referrer使用方法
1、前言摘要
在csdn网站随便抓个链接来看看:
Referer参数:
referrer policy是unsafe url的,ok,下面介绍一下Referer和referrer policy
2、Referer简介
referer参数是http请求头header里的一个关键参数,表示的意思是链接的来源地址,比如在页面引入图片、JS 等资源,或者跳转链接,一般不修改策略,都会带上Referer
3、Referer安全性
Referer这个http header的参数应用得当的话,是可以提高安全性的,比如,可以这个参数其实就告诉了链接的请求来源于哪个网站,所以可以根据这个特性,限制一些接口只能本网站的才能调,外部网站不能调
案例:
比如你曾经在浏览器访问过银行A的网站,所以浏览器是有保存Cookie的,Cookie并没有过期,这时,你不小心登录一个恶意的论坛网站还是什么网站,你访问了链接(其实链接后面加的是窃取Cookie,调银行A网站转账API),这时候,如果网站安全性验证不过的话,就会窃取金钱的恶意操作
针对这个银行转账窃取案例,我们或许可以这样改造,我们可以再增加一个验证的工程,不给直接调用转账接口,我们在这个验证工程里加入Referer识别的。这时候,CSRF攻击的话,肯定得在非银行A官网的服务器发送请求,我们改造之后,这个请求会先发送到验证工程这里,这时候解析请求,获取Referer属性进行识别,发现不是银行A官网的地址,这时候直接拦截,拒绝访问。
这个案例是合理应用Referer的,当然Referer是记录来源地址,很显然,这个Referer的url里很可能也会带上一些敏感信息,比如token或者用户的信息等,这些一旦被其它网站窃取了,是很危险的,如果对于Referer参数要合理地使用,所以有必要介绍一下w3c提出的referrer policy
ps:http header里的referer其实是拼写少了一个r,正确的拼写应该是referrer ,不过当初http标准发出来时候,并没有发现拼写错了,所以现在一直保持着拼写错误
4、相关术语
同源策略:同源策略指协议+域名+端口都相同的情况,是由Netscape提出的一个著名的安全策略,现在所有支持JavaScript 的浏览器都会使用这个策略。实际上,这种策略只是一个规范,并不是强制要求,各大厂商的浏览器只是针对同源策略的一种实现
跨域请求:跨域请求就是不符合同源策略的情况,也就是协议、域名、端口有一个或多个不一样,都算是跨域的请求,所以https链接和http链接的相互调用也是属于跨域的请求
5、Referrer Policy
Referrer Policy是W3C官方提出的一个候选策略,主要用来规范Referrer
官网:https://www.w3.org/TR/referrer-policy/
最初是只有5种策略的,现在规范增加到9种
enum ReferrerPolicy {"","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"
};
5.1、no-referrer
不发送referrer信息
5.2、no-referrer-when-downgrade
协议降级时候不发送Referrer信息,其实https的网站链接调到http的网站链接
5.3、same-origin
同源链接(协议、域名、端口都相同)发送,否则不发送
5.4、origin
Referrer发送的信息只包括协议+域名+端口,不包括其它信息
5.5、strict-origin
https的网站协议降级访问http的网站,这种情况就是一种不严格的情况,这种情况不发送Referrer,其它情况发送Referrer(协议+域名+端口),注意这里的Referrer同样只包括协议+域名+端口而已
5.6、origin-when-cross-origin
跨域时候发送Referrer(协议+域名+端口),其它情况也就是同源的情况发送完整的Referrer信息
5.7、strict-origin-when-cross-origin
这里有两个条件,1、严格模式,也就是不会出现https的网站协议降级调http的链接;2、跨域,符合这两种情况的,发送Referrer(协议+域名+端口),其它情况包括https的网站调http的链接这种协议降级的情况,等等,还有很多情况,这些情况都发送完整的Referrer
5.8、unsafe-url
这种情况是不管是否协议降级访问,还是同源跨域访问,全都发送Referrer,当然这里的Referrer也是完整的Referrer,有什么就发什么,所以这种是一种不安全的协议
5.9、空字符串
空字符串“”对应于无引用者策略,导致回退到其他位置定义的引用者策略,或者在没有此类更高级别策略的情况下,默认为“ no-referrer-when-downgrade”。此默认设置发生在官网§8.3确定请求的Referrer算法中。
6、Referrer使用方法
单个标签设置:<a>、<area>、<img>、<iframe>、<link>
,这些标签都可以设置referrerpolicy属性
<a href="http://example.html" referrerpolicy="origin" target="_blank">链接</a>
全局策略设置:加个meta标签,content=“策略”
<meta name="referrer" content="origin">
HTTP系列之Referer和Referrer policy简介相关推荐
- Referer和Referrer Policy详解
最近换了个负责网络安全的leader,整个部门开始网络安全整顿,我们负责WEB的接到通知要求防御CSRF攻击,设置referer白名单.之前看过一点referer相关的,但是了解不够深入,趁这次机会好 ...
- css 添加 referer,http中Referer和Referrer Policy
一. referer是什么referer:引用页.HTTP请求头信息中,referer用于提供访问来源的信息,客户端发送请求的时候,自主决定是否加上该字段.服务器一般使用referer识别访问来源,可 ...
- HTTP请求中的Referer和Referrer Policy
Referer Referer请求头包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的.服务端一般使用Referer(注:正确英语拼写应该是referrer,由于早期HT ...
- HTTP的Referrer Policy
客户端通过设置Referrer Policy来控制是否在请求头中告知服务端请求来源.来源信息写在生成的请求头的referer中. 注意 Referer 实际上是单词 "referrer&qu ...
- HTTP的Referrer和Referrer Policy介绍
本文链接:https://blog.csdn.net/dujie1219/article/details/111273925 Referrer referrer是HTTP请求header的报文头,用于 ...
- openresty开发系列12--lua介绍及常用数据类型简介
openresty开发系列12--lua介绍及常用数据类型简介 lua介绍 1993 年在巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de ...
- Linux Shell脚本入门教程系列之(一)Shell简介
本文是Linux Shell脚本系列教程的第(一)篇,更多shell教程请看:Linux Shell脚本系列教程 想要学习linux,shell知识必不可少,今天就给大家来简单介绍下shell的基本知 ...
- Referrer Policy 介绍
当用户在浏览器上点击一个链接时,会产生一个 HTTP 请求,用于获取新的页面内容,而在该请求的报头中,会包含一个 Referrer,用以指定该请求是从哪个页面跳转页来的,常被用于分析用户来源等信息.但 ...
- Referrer Policy: strict-origin-when-cross-origin 的解决办法
问题概述 关于这个问题,是在微信公众号的开发过程中遇到的, 在进行配置域名进行调用时,出现:" Referrer Policy: strict-origin-when-cross-origi ...
最新文章
- 通过BeanFactory获取bean的几种方法
- idea从git上拉取并管理项目
- 构建强化学习_如何构建强化学习项目(第1部分)
- JS 几种数据类型及其转换
- Java Web开发技术教程入门-JavaBean组件与Servlet
- 好记性不如烂笔头——.NET运行原理
- SDN期末作业——负载均衡
- Numpy的使用(1)
- Java反射异常处理之InvocationTargetException
- app测试和接口测试区别
- html 4种居中方式
- Linux下如何进入Redis客户端
- Angular设置代理
- me909嵌入式linux,树莓派驱动ME909s-821
- model.show_result()导致jupyter lab提示服务似乎挂掉,但会立刻重启
- 解决苹果手机滑动卡顿
- pip install时报错超时(pip._vendor.requests.packages.urllib3.exceptions.ReadTimeoutError: HTTPSConnec)解决方案
- 三星为企业服务器开发高性能PCIe 5.0固态硬盘;阳狮集团升任张珲杰为明思力中国董事总经理 | 全球TMT...
- 轻博客系统 doudangQb
- 苹果语音备忘录怎么改名字_语音备忘录误删除怎么恢复?安利你个简单方法
热门文章
- Webgoat靶场搭建
- 2013计算机二级试题,2013全国二级计算机试题.doc
- 时间复杂度计算方法以及常见的时间复杂度
- linux命令chgrp,每天一个linux命令 chgrp命令
- 分享118个HTML个性简实模板,总有一款适合您
- 计算机网络学习笔记(三)——数据链路层功能和服务、帧定位、差错、海明距离、检错码和纠错码
- linux php pear 安装,linux php安装pear
- linux gtk显示中文图片,Linux C编程-GTK+ 2.0 中文教程/使用GTK+ GNOME库(080809更新)
- 【Android】chrome xxx is 32-bit instead of 64-bit
- 生成对抗网络GANCycleGAN