当前位置: 首页 > news >正文

nginx referer-policy 和 referer

Nginx的Referrer-Policy配置用于控制HTTP请求中Referer头的发送行为,是W3C提出的安全策略标准4。以下是关键配置方法和策略说明:

  1. 基础配置语法
    在Nginx的server块中添加HTTP响应头实现:

add_header Referrer-Policy "策略值";

支持9种策略值,包括默认的no-referrer-when-downgrade4。

  1. 常用策略类型
  • no-referrer:完全禁用Referer头
  • origin:仅发送协议+域名+端口(如https://example.com
  • strict-origin:HTTPS->HTTPS时发送源域名,降级到HTTP时不发送
  • same-origin:同源请求发送完整Referer,跨域不发送4。
  1. 完整安全配置示例
    建议与其他安全头配合使用:

server { add_header Referrer-Policy "strict-origin"; add_header Content-Security-Policy "default-src 'self'"; add_header X-Frame-Options "SAMEORIGIN"; }

这种组合可有效防御点击劫持和跨站脚本攻击14。

  1. 注意事项
  • 策略生效需确保Nginx版本支持add_header指令
  • 移动端浏览器对部分策略(如strict-origin-when-cross-origin)兼容性需测试23
  • 配置后需执行nginx -t测试并重载服务5。

该策略与防盗链(valid_referers)的区别在于:Referrer-Policy是客户端行为规范,而valid_referers是服务端验证机制24。

nginx Referrer-Policy 默认策略

Nginx的Referrer-Policy默认策略为no-referrer-when-downgrade,该策略行为如下:

  1. 默认触发条件
    当未显式配置Referrer-Policy头时,浏览器会自动采用此策略36。

  2. 策略行为规则

  • HTTPS → HTTPS:发送完整Referer头(包含源URL路径)
  • HTTPS → HTTP:不发送任何Referer信息(协议降级保护)
  • HTTP → HTTP:发送完整Referer头68。
  1. 与其他策略对比
  • strict-origin宽松:后者在HTTP→HTTP时仅发送源域名
  • unsafe-url严格:后者始终发送完整Referer无论协议降级68。
  1. 显式配置方法
    可通过Nginx的add_header指令强制指定:

add_header Referrer-Policy "no-referrer-when-downgrade";

该配置需放置在server或location块中

Nginx的referer功能主要通过HTTP请求头中的Referer字段实现访问控制和请求修改,主要应用场景包括防盗链和请求头定制14。以下是核心功能说明:

  1. 防盗链配置
  • 使用valid_referers指令定义合法来源域名,配合$invalid_referer变量拦截非法请求:

location ~* \.(jpg|png)$ { valid_referers none blocked *.example.com; if ($invalid_referer) { return 403; } }

原理是通过校验请求头中的Referer值,若不在白名单则返回40315。

  1. 修改Referer头
  • 通过proxy_set_header指令可覆盖原始Referer值,常用于反向代理场景:

location /proxy/ { proxy_set_header Referer "https://trusted.com"; }

该方法可伪造Referer实现访问控制或统计需求23。

  1. 安全特性
  • Referer字段易被伪造,不可作为唯一安全依据,需结合其他验证手段15
  • none参数允许直接访问(无Referer),blocked处理被防火墙修改的Referer48

典型应用场景包括:防止图片盗链、限制API调用来源、跨站请求统计等67。配置生效需重启Nginx服务

http://www.dtcms.com/a/354395.html

相关文章:

  • redis集群分片策略
  • 【温室气体数据集】NOAA CCGG 飞机观测温室气体
  • 2025年06月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • spring-cloud项目中gateway配置解析
  • DMA学习
  • 【0420】Postgres内核 smgr + md + vfd 实现为指定 table(CREATE TABLE)创建 disk file
  • 每日八股文8.27
  • Linux系统调优工具
  • [Sync_ai_vid] 数据处理流水线 | 配置管理系统
  • 【重学 MySQL】九十二、 MySQL8 密码强度评估与配置指南
  • mysql mvcc机制详解
  • 期权交易中的“道”:从《道德经》中汲取投资智慧
  • RHEL9部署MySQL数据库及数据库的基本使用(增删改查,数据备份恢复)
  • 基于SpringBoot的社区儿童疫苗接种预约系统设计与实现(代码+数据库+LW)
  • Vue将内容生成为二维码,并将所有二维码下载为图片,同时支持批量下载(下载为ZIP),含解决一次性生成过多时页面崩溃解决办法
  • 【雅思020】Opening a bank account
  • C语言二级考试环境配置教程【window篇】
  • 能源行业数据库远程运维安全合规实践:Web化平台的落地经验
  • 【系统分析师】高分论文:论快速应用开发方法及应用
  • Linux初始——基础指令篇
  • Libvio 访问异常排查指南​
  • List | 常见的List实现类(ArrayList、LinkedList、Vector)以及ArrayList源码解读
  • 【Redis】数据分片机制和集群机制
  • 8.28 模拟|双指针
  • 零基础-力扣100题从易到难详解(持续更新1-10题)
  • Windows 命令行:rmdir 命令
  • Qt 6 与 Qt 5 存在的兼容性差异
  • C# 数组C# 多维数组
  • QML(2) - Qt 中如何注册一个 C++ 类到 QML
  • MySQL的类split方法实现