php apache無法接收到Authorization header

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 = z3 的調和函數

問題 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…