Web安全 - “Referrer Policy“ Security 头值不安全
文章目录
- 概述
- 原因分析
- 风险说明
- `Referrer-Policy` 头配置选项
- 1. 不安全的策略
- `no-referrer-when-downgrade`
- `unsafe-url`
- 2. 安全的策略
- `no-referrer`
- `origin`
- `origin-when-cross-origin`
- `same-origin`
- `strict-origin`
- `strict-origin-when-cross-origin`
- 推荐配置
- Nginx 配置示例
- 在 Nginx 中配置 `Referrer-Policy`
- 配置示例
- 总结
概述

原因分析
Referrer Policy(引用策略)是 Web 应用程序的一个关键配置,用于定义浏览器在向目标网站发送请求时,如何处理并发送 Referer 头信息。Referer 头可能包含敏感信息(例如:用户名、密码、文件路径、页面 URL 等),如果没有正确配置 Referrer-Policy,这些信息可能被暴露给跨站点(第三方)请求,从而导致安全漏洞。
不正确的配置(例如使用 no-referrer-when-downgrade 或 unsafe-url)可能会导致:
- 敏感信息泄露:例如,包含敏感信息的 URL 可能会被无意间暴露给第三方网站。
- 跨站点泄漏:如果不适当地泄露了
Referer,其他站点可能会获得该敏感数据。 - 攻击者利用信息:例如,攻击者通过分析泄露的
Referer信息,可能会获得关于用户身份、账户、甚至敏感资源的线索,从而进行攻击。
风险说明

-
敏感数据泄露:
- 如果
Referrer-Policy配置不当,用户在浏览页面时,URL 地址中可能会暴露敏感信息(如用户名、密码、身份标识符、路径信息等),这些信息可能会通过Referer头发送到外部站点。 - 特别是在 HTTP 到 HTTPS 跳转或跨站点请求时,URL 中的敏感数据可以被泄露,进一步加大了信息泄露的风险。
- 如果
-
用户信任受损:
- 防备心不强的用户在网站上提供敏感信息(如信用卡号、社会保险号等)时,若系统没有正确保护其数据隐私(如通过不安全的
Referer配置泄露了敏感信息),可能会引发信任危机。
- 防备心不强的用户在网站上提供敏感信息(如信用卡号、社会保险号等)时,若系统没有正确保护其数据隐私(如通过不安全的
-
潜在的跨站点攻击:
- 不正确的
Referrer-Policy使得敏感信息可以通过Referer头泄漏给不受信任的第三方站点,这可能会为攻击者提供利用跨站点漏洞(如 CSRF、XSS 等)的机会。
- 不正确的
Referrer-Policy 头配置选项
"no-referrer-when-downgrade" 和 "unsafe-url" 是泄露第三方网站完整 URL 的策略,它们可能导致敏感信息泄漏。
1. 不安全的策略
no-referrer-when-downgrade
- 定义:当请求从 HTTPS 协议降级到 HTTP 时,不会发送
Referer头;但在其他情况下(包括 HTTPS 到 HTTPS,HTTP 到 HTTP),仍会发送完整的Referer头。 - 风险:
- 当从 HTTPS 页面跳转到 HTTP 页面时,浏览器不会发送
Referer头,以防泄露信息。 - 然而,在 HTTPS 到 HTTPS 或 HTTP 到 HTTP 的情况下,
Referer头会包含完整的 URL(包括路径和查询参数),这可能会泄露敏感数据。 - 该策略不能完全保护隐私,尤其是跨站点的情况。
- 当从 HTTPS 页面跳转到 HTTP 页面时,浏览器不会发送
unsafe-url
- 定义:始终发送完整的
Referer头,包括 URL 的协议、主机、路径和查询参数,无论目标页面的协议如何。 - 风险:
- 这种配置会导致
Referer头泄漏所有请求的详细信息,包括路径和查询字符串。 - 即使请求从 HTTPS 页面跳转到 HTTP 页面,浏览器仍会发送完整的 URL,这可能会导致敏感信息(如会话 ID、用户数据等)泄漏。
- 强烈不建议使用该策略,尤其在涉及敏感数据的站点上。
- 这种配置会导致
2. 安全的策略
与上述不安全的策略相比,以下是一些更为安全的 Referrer-Policy 配置,能够有效防止敏感信息泄漏。
no-referrer
- 定义:完全禁止浏览器发送
Referer头。 - 优点:
- 提供最高级别的隐私保护,不会泄露任何来源信息。
- 防止所有跨站点的
Referer泄露。
- 缺点:
- 对某些需要依赖
Referer信息的功能(例如,分析或日志记录)会有影响。 - 如果网站内部的某些操作依赖于
Referer,则需要考虑是否适合使用该策略。
- 对某些需要依赖
origin
- 定义:仅发送请求的源(域名),而不包含路径和查询参数。
- 例如,
Referer: https://example.com/而不是https://example.com/path?query=param。
- 例如,
- 优点:
- 只泄露源(域名),不泄露路径或查询字符串,适合保护用户隐私。
- 缺点:
- 适用于需要保护隐私的跨站点请求,但在某些情况下,源信息可能不足以满足需要跟踪源的应用程序需求。
origin-when-cross-origin
- 定义:当请求是同源请求时,发送完整的
Referer头(包括路径和查询参数);当请求是跨站点请求时,仅发送源(域名)。 - 优点:
- 为同源请求提供完全的
Referer信息,而对于跨站点请求则仅泄露源信息,最大限度地减少跨站点泄露敏感信息的风险。 - 推荐用于保护隐私并确保同源请求的正常运作。
- 为同源请求提供完全的
- 缺点:
- 对跨站点请求仍然可能会限制某些分析或跟踪功能,但在隐私和安全性方面提供了更好的平衡。
same-origin
- 定义:只有在请求目标与当前页面同源时,才会发送
Referer头。跨站点请求将不发送Referer。 - 优点:
- 最大限度地保护跨站点隐私,完全防止了跨站点泄漏
Referer信息。
- 最大限度地保护跨站点隐私,完全防止了跨站点泄漏
- 缺点:
- 对于跨站点请求(如 API 调用),无法发送
Referer信息,这可能影响一些站点功能(如跨站点资源共享等)。
- 对于跨站点请求(如 API 调用),无法发送
strict-origin
- 定义:只有在请求的目标是安全站点(即 HTTPS)并且协议一致时,才发送
Referer头。对跨站点请求的保护比origin更严格。 - 优点:
- 对跨站点请求有更强的隐私保护,确保只有同协议的请求会发送源信息。
- 缺点:
- 如果目标站点使用的是 HTTP 协议,甚至源信息也不会被发送。
strict-origin-when-cross-origin
- 定义:如果请求是同源请求,则发送完整的
Referer头;如果请求是跨站点请求,则仅发送源(域名);且目标站点需要使用 HTTPS 协议时才会发送Referer。 - 优点:
- 这是目前最为推荐的策略,在保证跨站点隐私的同时,允许同源请求发送完整的
Referer信息。即使是跨站点请求,也只会泄露源信息,并且只有目标是安全的 HTTPS 网站时,才会发送Referer信息。 - 提供了对隐私的最大保护,同时不会干扰正常功能。
- 这是目前最为推荐的策略,在保证跨站点隐私的同时,允许同源请求发送完整的
- 缺点:
- 对于不使用 HTTPS 的目标站点,
Referer信息将不被发送。
- 对于不使用 HTTPS 的目标站点,
推荐配置
对于大多数站点,strict-origin-when-cross-origin 是最佳选择,因为它在保障隐私和安全的同时,不会对大多数跨站点请求产生负面影响。
Nginx 配置示例
http {add_header Referrer-Policy "strict-origin-when-cross-origin" always;
}
- 不安全的策略(如
no-referrer-when-downgrade和unsafe-url)会泄漏敏感信息,尤其是在跨站点请求时。 - 推荐的策略(如
strict-origin-when-cross-origin、origin-when-cross-origin)能够在保持功能正常的同时,最大限度地保护用户隐私。 - 配置
Referrer-Policy头是 Web 安全的重要措施,确保适当配置可以降低泄漏敏感数据的风险。
在 Nginx 中配置 Referrer-Policy
可以通过在 Nginx 配置中设置适当的 Referrer-Policy 来避免泄漏敏感信息。
配置示例
-
全局设置:
http {add_header Referrer-Policy "strict-origin-when-cross-origin" always; } -
虚拟主机设置:
server {listen 80;server_name example.com;add_header Referrer-Policy "strict-origin-when-cross-origin" always;# 其他配置... } -
特定路径设置:
server {listen 80;server_name example.com;location /some-path/ {add_header Referrer-Policy "no-referrer" always;}# 其他配置... }
总结
- Referrer-Policy 头是防止敏感数据泄露的有效工具。合理配置此头可以保护用户隐私,防止跨站点泄露敏感信息。
- 避免使用不安全的策略,如
no-referrer-when-downgrade和unsafe-url,并优选使用strict-origin-when-cross-origin或更严格的策略。 - 定期检查并更新你的 Web 应用配置,确保所有安全头都已正确设置,以减少潜在的安全风险。

相关文章:
Web安全 - “Referrer Policy“ Security 头值不安全
文章目录 概述原因分析风险说明Referrer-Policy 头配置选项1. 不安全的策略no-referrer-when-downgradeunsafe-url 2. 安全的策略no-referreroriginorigin-when-cross-originsame-originstrict-originstrict-origin-when-cross-origin 推荐配置Nginx 配置示例 在 Nginx 中配置 …...
C#OPC(上)
OPC(OLE for Process Control),用于过程控制的OLE,是一个工业标准,管理这个标准的国际组织是OPC基金会,OPC基金会现有会员以超过220家。遍布全球,包括世界上所有主要的自动化控制系统、仪器仪表及过程控制系统的公司。基于微软的O…...
Imgui + Cmake + OpenGL + GLFW 隐藏控制台窗口
网上一般是VS,如何在属性里面把控制台改为窗口 本文,使用Clion Cmake,实现如何隐藏控制台窗口 环境:OpenGL3 GLFW 添加头文件#include <windows.h>把main函数入口改为int WinMain(HINSTANCE hInstance, HINSTANCE hPrevI…...
Spring Boot(七):Swagger 接口文档
1. Swagger 简介 1.1 Swagger 是什么? Swagger 是一款 RESTful 风格的接口文档在线自动生成 功能测试功能软件。Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。目标是使客户端和文件系统作为服务器以同样的…...
RabbitMQ - 4 ( 22000 字 RabbitMQ 入门级教程 )
一: RabbitMQ 高级特性 前面主要讲解了 RabbitMQ 的概念和应用。RabbitMQ 实现了 AMQP 0-9-1 规范,并在此基础上进行了多项扩展。在 RabbitMQ 官方网站中详细介绍了其特性,我们将其中一些重要且常用的特性挑选出来进行讲解。 1.1 消息确认 …...
印象笔记07——试一试PDF标注
印象笔记07——试一试PDF标注 [!CAUTION] 根据第六期,我再次查询了资料,印象笔记还是有一些可圈可点的功能的(当然部分有平替),针对会员作用,开发使用场景虽然是逆向的,但我坚信这是一部分人的现…...
Vue3实战教程》24:Vue3自定义指令
如果您有疑问,请观看视频教程《Vue3实战教程》 自定义指令 介绍 除了 Vue 内置的一系列指令 (比如 v-model 或 v-show) 之外,Vue 还允许你注册自定义的指令 (Custom Directives)。 我们已经介绍了两种在 Vue 中重用代码的方式:组件和组…...
【2025优质学术推荐】征稿控制科学、仪器、智能系统、通信、计算机、电子信息、人工智能、大数据、机器学习、软件工程、网络安全方向
【2025优质学术推荐】征稿控制科学、仪器、智能系统、通信、计算机、电子信息、人工智能、大数据、机器学习、软件工程、网络安全方向 【2025优质学术推荐】征稿控制科学、仪器、智能系统、通信、计算机、电子信息、人工智能、大数据、机器学习、软件工程、网络安全方向 文章目…...
【ArcGIS Pro/GeoScene Pro】可视化时态数据
可视化过去二十年新西兰国际旅游业的发展变化 工程数据下载 ArcGIS Pro 快速入门指南—ArcGIS Pro | 文档 添加数据 数据为中国旅客数据 转置表字段 列数据转行数据...
Linux buildroot和ubuntu的异同点
Buildroot 和 Ubuntu 都是 Linux 系统的操作环境,但它们的设计理念和使用场景有很大的不同。 一、定义与目标 Buildroot Buildroot 是一个用于生成嵌入式 Linux 系统的工具集,专注于交叉编译和构建嵌入式设备的最小 Linux 环境。它的目标是为嵌入式系统提供定制化和优化的…...
k8s系列--通过docker拉取的镜像导入到 containerd中
要将通过 docker pull 拉取的镜像导入到 containerd 中,可以按照以下步骤操作: 步骤 1:使用 docker 将镜像保存为 tar 文件 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.11.1 docker save registry.cn-ha…...
Spring Boot(快速上手)
Spring Boot 零、环境配置 1. 创建项目 2. 热部署 添加依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional> </dependency&…...
note 41:账务系统开发规范
目录 系统设计 防重控制 流量控制 并发控制 异常处理 备份机制 系统开发 前端队列操作 外系统交互 系统设计 防重控制 对于进入到系统中的数据(文件导入、手工录入、系统直连等)以及本系统发往外…...
基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真。具体参考文献: 考虑使用UAV作为中继辅助节点的设备到设备(D2D)无线信息和…...
《Vue3实战教程》35:Vue3测试
如果您有疑问,请观看视频教程《Vue3实战教程》 测试 为什么需要测试 自动化测试能够预防无意引入的 bug,并鼓励开发者将应用分解为可测试、可维护的函数、模块、类和组件。这能够帮助你和你的团队更快速、自信地构建复杂的 Vue 应用。与任何应用一…...
【Java设计模式-3】门面模式——简化复杂系统的魔法
在软件开发的世界里,我们常常会遇到复杂的系统,这些系统由多个子系统或模块组成,各个部分之间的交互错综复杂。如果直接让外部系统与这些复杂的子系统进行交互,不仅会让外部系统的代码变得复杂难懂,还会增加系统之间的…...
log4j2的Strategy、log4j2的DefaultRolloverStrategy、删除过期文件
文章目录 一、DefaultRolloverStrategy1.1、DefaultRolloverStrategy节点1.1.1、filePattern属性1.1.2、DefaultRolloverStrategy删除原理 1.2、Delete节点1.2.1、maxDepth属性 二、知识扩展2.1、DefaultRolloverStrategy与Delete会冲突吗?2.1.1、场景一:…...
super_vlan
Super VLAN产生的背景 就经典的酒店例子来说,若是将101房和102房的网络划分在同一个vlan下面,那么101房出现了一个懂得某些安全技术的大佬,就会使得102房的隐私得到严重的隐患 所以这时我们就需要将二层给隔离开,但又要去保证10…...
前端CSS3学习
学习菜鸟教程 火狐-moz- 谷歌 Safari -webkit- 前面都加这个,可能才生效 边框 border: 1px solid #ddd 粗细 样式 样色 经常和border-radius 一块用 border-radius: 50px 20px 第一个左右 第二个右左 border-top-left-radius … box-shadow: 10px 5px 10px 0 #88…...
HTML——58.value和placeholder
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>value和placeholder属性</title></head><body><!--input元素的type属性:(必须要有)1.指定输入内容的类型2.默认为text,单行文本框-->&l…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
