Apache 默认不传递 Authorization头到后端环境(如 PHP)。其表现是:

print_r($_SERVER)时, 没有 [Authorization] :

Array
([Accept-Language] => zh,en;q=0.9,zh-CN;q=0.8,en-US;q=0.7[Accept-Encoding] => gzip, deflate[Referer] => http://www.ysp3.cn/[Origin] => http://www.ysp3.cn[Accept] => */*[User-Agent] => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36[Connection] => close[Host] => www.wzypsi.cn[Authorization] => Bearer 104203|tSD4KqTw422N9WbfJmaQbflcoNAixw3MG9NbWJIg
)

主要基于安全性和协议规范的考量。以下是其设计动机的详细分析:


🔒 ​​一、核心设计动机​

  1. ​安全风险控制​

    Authorization头通常包含敏感身份凭证(如 Basic Auth 的 Base64 编码密码、Bearer Token 等)。若默认传递这些信息到后端脚本(如 PHP),可能被恶意脚本或漏洞利用,导致凭证泄露。

    ​案例​​:共享主机环境中,多个用户共享同一 Apache 实例,传递该头可能被其他用户的脚本窃取。
  2. ​遵循 CGI/FastCGI 协议规范​

    CGI 规范(RFC 3875)明确要求​​过滤敏感头字段​​(如 Authorization和 Cookie),仅保留与请求处理直接相关的头(如 User-Agent

    Apache 作为中间层,需遵循此规范以保障兼容性。
  3. ​减少攻击面​

    默认过滤可避免后端应用因未正确处理敏感头而引发的安全漏洞(如日志记录敏感头、错误信息泄露等)

    例如:若 PHP 应用未加密日志,Authorization头可能被写入日志文件。
  4. ​性能优化​

    非认证请求(如静态资源)无需解析 Authorization头,过滤可减少不必要的资源开销。


⚖️ ​​二、实际影响与开发者困境​

  1. ​API 开发受阻​

    现代 API 依赖 Authorization头传递 Token(如 JWT),若 Apache 默认过滤,后端无法获取认证信息,导致 401 错误。开发者误区​​:常误以为是代码错误,而非服务器配置问题。
  2. ​环境差异性问题​

    Apache 与其他服务器(如 Nginx)行为不一致:Nginx 默认传递该头,导致开发环境(Nginx)正常而生产环境(Apache)失败。

🔧 ​​三、解决方案与设计妥协​

为解决上述问题,Apache 提供​​显式配置选项​​,允许开发者按需传递该头:

  1. .htaccess配置​

    SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 [1,5](@ref)
    原理:通过正则捕获 Authorization头内容,注入 HTTP_AUTHORIZATION环境变量(PHP 可通过 $_SERVER['HTTP_AUTHORIZATION']访问)
  2. mod_rewrite方案​
    RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] [3](@ref)
    适用场景:需处理 URL 重写时同步传递该头。

💎 ​​四、总结:安全与灵活的平衡​

​设计原则​

​具体表现​

​用户影响​

​安全性优先​

默认过滤敏感头,减少凭证泄露风险

后端需显式配置以获取 Authorization

​协议合规性​

遵循 CGI 规范,避免兼容性问题

开发者需理解服务器行为差异

​按需灵活性​

提供 SetEnvIf等配置,允许安全场景下传递敏感头

配置简单但需重启 Apache 生效

这一设计体现了 ​​“默认安全”原则​​(Secure by Default),即默认关闭高风险功能,仅在用户明确需求时启用。尽管增加了开发者的配置成本,但有效降低了系统级安全风险。

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

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

相关文章

当我们想用GPU(nlp模型篇)

在个人设备上“把 GPU 真正用起来”做 NLP,分五步:准备 → 安装 → 验证 → 训练/推理 → 踩坑排查。下面每一步都给出可复制命令和常见错误。 ────────────────── 1. 硬件准备 • 一张 NVIDIA GPU,算力 ≥ 6.1&#xff08…

CryptSIPVerifyIndirectData函数分析

可以使用此函数从SIP接口对应的文件中提取签名信息 CryptSIPVerifyIndirectData:将当前文件的哈希结果做为“指纹”,并与从CryptSIPGetSignedDataMsg中提取的签名信息进行比较。 如果哈希结果相同,则意味着当前文件与之前签名的文件相同&…

20250823解决荣品RD-RK3588-MID开发板在充电的时候大概每10s屏幕会像水波纹闪烁一下

20250823解决荣品RD-RK3588-MID开发板在充电的时候大概每10s屏幕会像水波纹闪烁一下 2025/8/23 17:58【结论】:使用直流电源供电,给电池【快速】充电,但是直流电源的电压稳定,电流抖动导致的!那个是2.4G 已经知道了我司…

CANN安装

前提条件 请参考本文档正确安装和使用CANN软件,不建议将CANN安装在共享磁盘后,通过挂载的方式使用CANN,因为CANN对文件系统有文件锁的依赖,部分共享存储不支持文件锁,可能导致任务拉起失败。 root用户和非root用户安装CANN软件包的步骤一致,当前示例步骤以非root用户为例…

docker的基础配置

目录 数据卷 数据卷容器 端口映射与容器互联 互联机制实现便捷互访(基于容器搭建论坛) 数据卷 1.创建数据卷 [rootopenEuler-1 /]# docker volume create test test [rootopenEuler-1 /]# docker volume ls DRIVER VOLUME NAME local test [ro…

VSCode Import Cost:5 分钟学会依赖瘦身

一句话作用:在代码里 import 时,实时显示包大小,帮你一眼揪出体积炸弹。1️⃣ 30 秒安装 & 启动 打开 VSCode → 扩展商店搜索 Import Cost → 安装重启 VSCode,立即生效,零配置。2️⃣ 使用方式(开箱即…

TCP/UDP详解(一)

UDP报文源端口16bit 目的端口16bit校验和checksum16bit 总长度16bit--------------------------------------------------------------------------------------------------------------------------源目端口用于标识应用层协议,分为知名端口&#x…

数据库优化提速(一)之进销存库存管理—仙盟创梦IDE

从存储过程到通用 SQL:进销存系统的数据操作优化在进销存系统的开发与维护中,数据库查询语句的编写方式对系统的性能、兼容性和可维护性有着深远影响。本文将围绕给定的三段 SQL 代码展开,深入探讨将存储过程转换为通用 SQL 在进销存场景下的…

Redis面试精讲 Day 28:Redis云原生部署与Kubernetes集成

【Redis面试精讲 Day 28】Redis云原生部署与Kubernetes集成 在当今微服务与容器化浪潮中,Redis作为高性能缓存和消息中间件,已从单机部署逐步演进为云原生环境下的核心组件。Day 28 聚焦“Redis云原生部署与Kubernetes集成”,深入解析如何在…

leetcode刷题记录03——top100题里的6道简单+1道中等题

leetcode刷题记录03——top100题里的6道简单1道中等题上一篇博客: leetcode刷题记录01——top100题里的7道简单题 leetcode刷题记录02——top100题里的7道简单题 有效的括号 看懂需要用栈了,但是不知道怎么去写,看了题解mark下正确答案。 cla…

求单位球内满足边界条件 u = z³ 的调和函数

问题 6:在区域 {x2y2z2≤1}\{x^{2}y^{2}z^{2}\leq 1\}{x2y2z2≤1} 内找到一个调和函数 uuu,使得在边界 x2y2z21x^{2}y^{2}z^{2}1x2y2z21 上,uuu 等于 gz3gz^{3}gz3。 提示:根据第8.1节,解必须是一个三次调和多项式&…

AAA 服务器与 RADIUS 协议笔记

一、AAA 服务器概述1. 核心定义AAA 是认证(Authentication)、授权(Authorization)和计费(Accounting) 的简称,是网络安全领域中实现访问控制的核心安全管理机制,通过整合三种服务确保…

Vue3源码reactivity响应式篇之数组代理的方法

概览 vue3中对于普通的代理包含对象和数组两类,对于数组的方法是重写了许多方法,具体实现参见packages\reactivity\src\arrayInstrumentations.ts arrayInstrumentations实际上就是一个对象,对象的属性就是数组的方法,属性值就是重…

如何玩转K8s:从入门到实战

一、K8S介绍及部署 1 应用的部署方式演变 部署应用程序的方式上,主要经历了三个阶段: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为应用…

综合测验:配置主dns,dhcp,虚拟主机,nfs文件共享等

综合实验(所有设备关闭防火墙和selinux)在appsrv上部署主dns,为example.com提供域名解析 安装bind bind-chroot rootappsrv ~]# yum install bind bind-chroot -y编辑主配置文件,全局配置文件,正向解析文件 [rootappsrv ~]# vim /etc/named.c…

MySQL数据库管理与索引优化全攻略

一、表管理1.建库语法:create database if not exists 数据库名;命名规则:仅可使用数字、字母、下划线、不能纯数字;区分字母大小写;具有唯一性;不可使用MySQL命令或特殊字符。相关命令:show databases; …

基于大模型构建 Java 混淆的方式方法(从入门到精通 · 含开源实践)

1. 目标与威胁模型:你到底想防什么? 把“混淆”当作成本叠加器:让逆向者付出更多时间与技能,而不影响用户体验与可维护性。可用 Collberg 等提出的四指标来权衡:有效性/韧性/隐蔽性/成本(potency/resilience/stealth/cost)。近年的研究也在重审这些评估方法,建议结合可…

RabbitMQ面试精讲 Day 28:Docker与Kubernetes部署实践

【RabbitMQ面试精讲 Day 28】Docker与Kubernetes部署实践 在微服务架构日益普及的今天,消息中间件RabbitMQ已成为解耦系统、异步通信的核心组件。随着云原生技术的成熟,如何在Docker与Kubernetes(K8s)环境中高效、高可用地部署Ra…

神经网络和深度学习介绍

目录 1.深度学习的介绍 2.神经网络的构造 ①神经元结构 ②神经网络组成 ③权重核心性 3.神经网络的本质 4.感知器 单层感知器的局限性: 5.多层感知器 多层感知器的优势: 6.偏置 7.神经网络的设计 8.损失函数 常用的损失函数: 9…

云原生俱乐部-k8s知识点归纳(8)

这一部分主要讲一讲CRD客户资源定义、Gateway API、Priority Class优先类、HPA自动扩缩这四部分内容。还剩下Argo CD的内容了整个k8s,至于operator的话单独有一本书,都是实战内容。CRD客户资源定义先来讲一讲这节内容的几个核心术语,Custom R…