Web安全 - “Referrer Policy“ Security 头值不安全

news2025/1/5 15:58:10

文章目录

  • 概述
  • 原因分析
  • 风险说明
  • `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-downgradeunsafe-url)可能会导致:

  • 敏感信息泄露:例如,包含敏感信息的 URL 可能会被无意间暴露给第三方网站。
  • 跨站点泄漏:如果不适当地泄露了 Referer,其他站点可能会获得该敏感数据。
  • 攻击者利用信息:例如,攻击者通过分析泄露的 Referer 信息,可能会获得关于用户身份、账户、甚至敏感资源的线索,从而进行攻击。

风险说明

在这里插入图片描述

  1. 敏感数据泄露

    • 如果 Referrer-Policy 配置不当,用户在浏览页面时,URL 地址中可能会暴露敏感信息(如用户名、密码、身份标识符、路径信息等),这些信息可能会通过 Referer 头发送到外部站点。
    • 特别是在 HTTP 到 HTTPS 跳转或跨站点请求时,URL 中的敏感数据可以被泄露,进一步加大了信息泄露的风险。
  2. 用户信任受损

    • 防备心不强的用户在网站上提供敏感信息(如信用卡号、社会保险号等)时,若系统没有正确保护其数据隐私(如通过不安全的 Referer 配置泄露了敏感信息),可能会引发信任危机。
  3. 潜在的跨站点攻击

    • 不正确的 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(包括路径和查询参数),这可能会泄露敏感数据。
    • 该策略不能完全保护隐私,尤其是跨站点的情况。

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 信息,这可能影响一些站点功能(如跨站点资源共享等)。

strict-origin

  • 定义:只有在请求的目标是安全站点(即 HTTPS)并且协议一致时,才发送 Referer 头。对跨站点请求的保护比 origin 更严格。
  • 优点
    • 对跨站点请求有更强的隐私保护,确保只有同协议的请求会发送源信息。
  • 缺点
    • 如果目标站点使用的是 HTTP 协议,甚至源信息也不会被发送。

strict-origin-when-cross-origin

  • 定义:如果请求是同源请求,则发送完整的 Referer 头;如果请求是跨站点请求,则仅发送源(域名);且目标站点需要使用 HTTPS 协议时才会发送 Referer
  • 优点
    • 这是目前最为推荐的策略,在保证跨站点隐私的同时,允许同源请求发送完整的 Referer 信息。即使是跨站点请求,也只会泄露源信息,并且只有目标是安全的 HTTPS 网站时,才会发送 Referer 信息。
    • 提供了对隐私的最大保护,同时不会干扰正常功能。
  • 缺点
    • 对于不使用 HTTPS 的目标站点,Referer 信息将不被发送。

推荐配置

对于大多数站点,strict-origin-when-cross-origin 是最佳选择,因为它在保障隐私和安全的同时,不会对大多数跨站点请求产生负面影响。

Nginx 配置示例

http {
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
}
  • 不安全的策略(如 no-referrer-when-downgradeunsafe-url)会泄漏敏感信息,尤其是在跨站点请求时。
  • 推荐的策略(如 strict-origin-when-cross-originorigin-when-cross-origin)能够在保持功能正常的同时,最大限度地保护用户隐私。
  • 配置 Referrer-Policy 头是 Web 安全的重要措施,确保适当配置可以降低泄漏敏感数据的风险。

在 Nginx 中配置 Referrer-Policy

可以通过在 Nginx 配置中设置适当的 Referrer-Policy 来避免泄漏敏感信息。

配置示例

  1. 全局设置

    http {
        add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    }
    
  2. 虚拟主机设置

    server {
        listen 80;
        server_name example.com;
        
        add_header Referrer-Policy "strict-origin-when-cross-origin" always;
        
        # 其他配置...
    }
    
  3. 特定路径设置

    server {
        listen 80;
        server_name example.com;
        
        location /some-path/ {
            add_header Referrer-Policy "no-referrer" always;
        }
        
        # 其他配置...
    }
    

总结

  • Referrer-Policy 头是防止敏感数据泄露的有效工具。合理配置此头可以保护用户隐私,防止跨站点泄露敏感信息。
  • 避免使用不安全的策略,如 no-referrer-when-downgradeunsafe-url,并优选使用 strict-origin-when-cross-origin 或更严格的策略。
  • 定期检查并更新你的 Web 应用配置,确保所有安全头都已正确设置,以减少潜在的安全风险。

在这里插入图片描述

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

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

相关文章

FFmpeg:详细安装教程与环境配置指南

FFmpeg 部署完整教程 在本篇博客中,我们将详细介绍如何下载并安装 FFmpeg,并将其添加到系统的环境变量中,以便在终端或命令行工具中直接调用。无论你是新手还是有一定基础的用户,这篇教程都能帮助你轻松完成 FFmpeg 的部署。 一、…

AcWing练习题:平均数1

读取两个浮点数 AA 和 BB 的值,对应于两个学生的成绩。 请你计算学生的平均分,其中 AA 的成绩的权重为 3.53.5,BB 的成绩的权重为 7.57.5。 成绩的取值范围在 00 到 1010 之间,且均保留一位小数。 输入格式 输入占两行&#x…

Unity学习笔记(四)如何实现角色攻击、组合攻击

前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 实现动画 首先实现角色移动的动画,动画的实现过程在第二篇,这里仅展示效果 attack1 触发攻击动画 实现脚本 接下来我们通过 Animator 编辑动画之间的过渡&#…

如何使用MySQL的group_concat函数快速做关联查询?

当我们需要做一对多的关联查询时,会很容易想到用left join来实现。例如,现有country表和city表之间建立了一对多的关联关系。如果要展示各国家以及城市列表,会很容易想到以下SQL: SELECT country, city FROM country LEFT JOI…

Go快速开发框架2.6.0版本更新内容快速了解

GoFly企业版框架2.6.0版本更新内容较多,为了大家能够快速了解,本文将把更新内容列出详细讲解。本次更新一段时间以来大伙反馈的问题,并且升级后台安全认证机制,增加了RBAC权限管理及系统操作日志等提升后台数据安全性。 更新明细…

行业分析---造车新势力之零跑汽车

1 背景 在之前的博客中,笔者撰写了多篇行业分析的文章(科技新能源): 《行业分析---我眼中的Apple Inc.》 《行业分析---马斯克的Tesla》 《行业分析---造车新势力之蔚来汽车》 《行业分析---造车新势力之小鹏汽车》 《行业分析---…

大数据与机器学习(它们有何关系?)

想了解大数据和机器学习吗?我们将为你解释它们是什么、彼此之间有何关联,以及它们为何在数据密集型应用中如此重要。 大数据和机器学习是如何相互关联的? 大数据指的是传统存储方法无法处理的海量数据。机器学习则是计算机系统从观察结果和…

有趣的python绘图介绍

以下介绍了几个有趣的Python绘图,感兴趣可以动手实践下! 一、正方形螺旋线 from turtle import *speed("fastest") pensize(2) color["purple","blue","red","black"] for i in range(200):pencolo…

【Mysql】Mysql/Mariadb开启binlog日志

前言 MySQL 的二进制日志(Binary Log,简称 binlog)用于记录数据库的所有更改操作,包括数据更改(如 INSERT, UPDATE, DELETE)和结构更改(如 CREATE TABLE, ALTER TABLE)。二进制日志的…

python检测同心圆

python检测同心圆 原图如下: import cv2 import numpy as np# 读取图像 image_path r"E:\pycharm3\pythonProject\image\image.png" img cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) # 灰度图像 img_color cv2.imread(image_path, cv2.IMREAD_C…

萌萌哒的八戒

萌萌哒的八戒 下载压缩包后,打开发现有一张照片 既然是关于猪的,那就用猪圈密码解码 flag{whenthepigwanttoeat}

【人工智能机器学习基础篇】——深入详解监督学习之模型评估:掌握评估指标(准确率、精确率、召回率、F1分数等)和交叉验证技术

深入详解监督学习之模型评估 在监督学习中,模型评估是衡量模型性能的关键步骤。有效的模型评估不仅能帮助我们理解模型在训练数据上的表现,更重要的是评估其在未见数据上的泛化能力。本文将深入探讨监督学习中的模型评估方法,重点介绍评估指…

pytorch基础之注解的使用--003

Title 1.学习目标2.定义3.使用步骤4.结果 1.学习目标 针对源码中出现一些注解的问题,这里专门写一篇文章进行讲解。包括如何自定义注解,以及注意事项,相信JAVA中很多朋友业写过,但是今天写的是Python哦。。。 2.定义 在 Python…

Linux day 1129

家人们今天继续学习Linux,ok话不多说一起去看看吧 三.Linux常用命令 3.1 Linux命令体验 3.1.1 常用命令演示 在这一部分中,我们主要介绍几个常用的命令,让大家快速感 受以下 Linux 指令的操作方式。主要包含以下几个指令: ls命…

【基础篇】二、MySQL数据库的操作

文章目录 前言Ⅰ. 创建数据库1、语法2、举例 Ⅱ. 字符集和校验规则1、查看系统默认字符集以及校验规则2、查看数据库支持的字符集3、查看数据库支持的字符集校验规则4、校验规则对数据库的影响 Ⅲ. 操作数据库1、查看数据库2、显示创建语句3、使用数据库4、删除数据库5、修改数…

NLP中的神经网络基础

一:多层感知器模型 1:感知器 解释一下,为什么写成 wxb>0 ,其实原本是 wx > t ,t就是阈值,超过这个阈值fx就为1,现在把t放在左边。 在感知器里面涉及到两个问题: 第一个,特征提…

2025常见的软件测试面试题

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 “ 今天我给大家介绍一些python自动化测试中常见的面试题,涵盖了Python基础、测试框架、测试工具、测试方法等方面的内容,希望能够帮助…

日常编码练习

通过投票对团队排名 题目要求: 解题思路: 思路:以示例1为例 1、我们需要去遍历该数据结构,同时记录每个字符出现的次数。为此需要定义一张哈希表来建立映射关系。 注:哈希表仅仅起到了两个作用 ①:建立映射…

Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J实现原理分析

文章目录 官网SLF4J 简单使用案例分析SLF4J 获取 Logger 的原理获取 ILoggerFactory 的过程获取 Logger 的过程SLF4J 与底层日志框架的集成 小结 官网 https://slf4j.org/ Simple Logging Facade for Java (SLF4J) 用作各种日志记录框架(e.g…

HALCON中用于分类的高斯混合模型create_class_gmm

目录 一、创建用于分类的高斯混合模型函数二、代码和效果展示三、相关函数 一、创建用于分类的高斯混合模型函数 create_class_gmm( : : NumDim, NumClasses, NumCenters, CovarType, Preprocessing, NumComponents, RandSeed : GMMHandle)create_class_gmm创建用于分类的高斯…