本系列第 6 篇處理「Redirect 如何繞過只檢查第一個網址的防禦」。重點不是背誦繞過字串,而是把外部輸入、URL 解析、DNS、實際連線、回應處理和網路權限逐層分開。只要能說清楚每層由誰決定、使用哪個解析結果,就能在設計與 Code Review 階段找出風險。
本篇會學到什麼
- 用資料流說明本篇 SSRF 風險,而不是依賴攻擊字串。
- 辨識安全檢查與實際連線可能不一致的位置。
- 以應用、網路、監控與事件回應建立可驗證的修補。
必備名詞與生活化心智模型
Redirect 像轉車:第一站安全,不代表下一站仍在允許範圍。只驗證初始 URL,等於把之後的目的地決定權交給第一個網站。
Source 是使用者可影響的網址或目的地識別;Parser 把文字拆成 URL 組件;Resolver 把 Host 轉成位址;Sink 是真正建立連線的 Client、代理或背景工作。驗證若只存在於其中一層,其他層仍可能採用不同資料。
SSRF 資料流技術圖

常見發生情境
圖片服務回傳 30x,HTTP Client 預設自動跟隨;應用程式看見的輸入 Host 合法,真正連線卻可能已改變。
審查時應由功能入口一路追到同步或非同步的網路 Sink。不要因欄位藏在 JSON、資料庫、Cookie、佇列或後台設定就假設可信;如果低信任角色能直接或間接改變目的地,它仍是外部控制資料。
不安全原始碼與逐步解讀
$options = ['follow_redirects' => true, 'max_redirects' => 20];
驗證第一個 URL 後開啟自動 Redirect,沒有控制跳數,也沒有對 Location 重新解析與分類。
- 找出輸入最初由誰控制,以及是否跨越資料庫或佇列。
- 確認安全檢查使用的解析器、DNS 答案和 Client 是否一致。
- 確認重試、Redirect、代理與背景工作會不會重新決定目的地。
- 盤點程式執行身分能接觸的網段、服務和資料。
修補後原始碼與設計理由
$options = ['follow_redirects' => false];
$next = $redirectPolicy->evaluateEachHop($location, $currentUrl, 3);
預設停用 Redirect;業務確實需要時,由應用逐跳解析相對位置、限制跳數,並重跑完整 scheme、host、port、DNS 與位址政策。
安全版本刻意把「授權目的地」與「執行請求」拆成兩個介面。政策回傳的不是可以任意修改的 URL 字串,而是含政策版本、正規化目的地、已驗證位址與資源限制的票據。執行層拒絕沒有票據的呼叫,才能避免另一段程式繞過共同控制。
如何驗證修補
使用表格驅動的離線測試,注入固定 DNS 答案與假 transport。至少驗證正常 Allowlist、錯誤 Scheme、userinfo、非預期 Port、解析失敗、私有/Loopback/Link-local、混合 A 與 AAAA、Redirect、逾時和超過回應大小。測試應斷言「沒有建立非預期連線」,而不是只比較錯誤文字。
部署測試再核對實際 Client profile、代理、環境變數、IPv6 路由與防火牆規則。單元測試證明政策邏輯,網路控制則證明即使應用層出錯,最壞影響仍受限制。
更多應用案例與常見誤判
最常見的誤判是把『沒有把回應顯示在頁面』當成沒有 SSRF,或把 WAF 命中當成根因已修補。另一個誤判是相信來自自家資料庫的 URL;資料可能先由低信任使用者寫入,之後才由高權限背景工作取出。判斷依據必須是資料控制權與最終 Sink,而不是欄位所在位置。
正常的特殊字元、國際化網域、暫時 DNS 錯誤或第三方服務改址也可能觸發規則。防守端應保留可解釋的拒絕原因與政策版本,讓開發者能修正業務設定,但不能因為出現誤判就把預設政策改成全部允許。
開發與 SOC 觀察點
記錄每一跳的正規化目的地、狀態碼與政策結果;不把含敏感 query 的 Location 原文寫入一般日誌。
建議日誌欄位包含時間、功能、使用者/工作 ID、trace ID、政策結果、正規化 Host、Port、位址類別、Redirect 跳數、耗時、回應大小與結果類別。查詢字串、Header、憑證與完整回應不可直接進入一般日誌。SOC 應把應用事件、DNS、出口代理、網路流量和雲端稽核串成同一時間線。
防禦檢查清單
- 能否不用完整 URL,而改用已登錄的目的地 ID?
- Scheme、userinfo、Host、Port、DNS 全部答案與每一個 Redirect 是否受控?
- 驗證結果是否與實際連線綁定,重試時是否重新套用政策?
- 是否設定連線/總逾時、回應大小、內容型別與方法限制?
- 工作負載身分、網段與出口代理是否遵循最小權限?
- 能否用 trace ID 還原來源、政策、DNS、連線與結果?
重點整理與下一篇
Redirect 如何繞過只檢查第一個網址的防禦的核心是控制『伺服器最後實際連到哪裡』。字串驗證只是入口;真正可靠的方案還要涵蓋解析一致性、位址分類、Client 行為、出口限制與可觀測性。下一篇會沿著系列順序,把這些控制套到另一個常見 SSRF 邊界。
參考資料與更新日期
更新日期:2026-07-20















