男女做爽爽爽网站-男女做羞羞高清-男女做爰高清无遮挡免费视频-男女做爰猛烈-男女做爰猛烈吃奶啪啪喷水网站-内射白浆一区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

【WEB開發】偽造X-Forwarded-For繞過服務器IP地址過濾

admin
2025年5月13日 23:40 本文熱度 47

在正常的TCP/IP 通信中,是可以偽造數據包來源 IP 的,但這會讓發送出去的數據包返回到偽造的IP上,無法實現正常的通信。

實現TCP/IP層級別的偽造很難,因為很難實現正常的TCP連接;但是在應用層協議HTTP上的實現較容易,通過偽造IP,能欺騙多數服務器應用程序實現通信。對于繞過服務器的IP地址過濾或者偽造來源IP特別有用,導致的后果就是非授權IP能訪問服務器,甚至能鉆服務器的漏洞。

這其中的關鍵就是偽造X-Forwarded-For。

一、X-Forwarded-For介紹

我們知道 HTTP 連接基于 TCP 連接,HTTP 協議中沒有 IP 的概念,只能通過X-Forwarded-For來實現。

X-Forwarded-For位于HTTP協議的請求頭, 是一個 HTTP 擴展頭部。HTTP/1.1(RFC 2616)協議并沒有對它的定義,它最開始是由 Squid 這個緩存代理軟件引入,用來表示 HTTP 請求端真實 IP。如今它已經成為事實上的標準,被各大 HTTP 代理、負載均衡等轉發服務廣泛使用,并被寫入RFC 7239(Forwarded HTTP Extension)標準之中。

X-Forwarded-For 請求頭格式非常簡單:

X-Forwarded-For: client, proxy1, proxy2

可以看到,XFF 的內容由「英文逗號 + 空格」隔開的多個部分組成,最開始的是離服務端最遠的設備 IP,然后是每一級代理設備的 IP。

如果一個 HTTP 請求到達服務器之前,經過了三個代理 Proxy1、Proxy2、Proxy3,IP 分別為 IP1、IP2、IP3,用戶真實 IP 為 IP0,那么按照 XFF 標準,服務端最終會收到以下信息:

X-Forwarded-For: IP0, IP1, IP2

Proxy3 直連服務器,它會給 XFF 追加 IP2,表示它是在幫 Proxy2 轉發請求。列表中并沒有 IP3,IP3 可以在服務端通過 Remote Address 字段獲得。Remote Address來自 TCP 連接,表示與服務端建立 TCP 連接的設備 IP,在這個例子里就是 IP3。

Remote Address 無法偽造,因為建立 TCP 連接需要三次握手,如果偽造了源 IP,無法建立 TCP 連接,更不會有后面的 HTTP 請求。不同語言獲取Remote Address的方式不一樣,例如Node.js 是req.connection.remoteAddress,原理都一樣。

一般的客戶端(例如:瀏覽器)在發送HTTP請求時,并不會設置X-Forwarded-For頭,當請求在到達第一個代理服務器時,代理服務器會在請求字段中加上X-Forwarded-For這個字段,并將其值設置為客戶端的IP地址,后面如果還有更多的代理服務器,會依次將Ip地址追加到X-Forwarded-For這個字段中,最終當請求到達了Web應用服務器,應用會通過獲取X-Forwarded-For頭取出最左邊的IP地址,即為客戶端的真實IP地址。

如果客戶端在發起請求時,請求頭上帶上一個偽造的X-Forwarded-For,由于后續每層代理只會追加而不會覆蓋,那么最終到達應用服務器時,最左邊的IP地址就是客戶端偽造的IP地址。

這個利用方法可以繞過一些針對IP地址進行限制的應用,例如:投票等應用

一般在nginx中會進行如下的配置

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for

這種如果沒有X-Forwarded-For消息頭會添加消息頭,如果存在該消息頭則會在后面追加一個IP。

二、X-Forwarded-For偽造

下面就是一種常見的獲取客戶端真實IP的方式

public String getClientIp(HttpServletRequest request) {    String xff = request.getHeader("X-Forwarded-For");    if (xff == null) {        return request.getRemoteAddr();    } else {        return xff.contains(",") ? xff.split(",")[0] : xff;    }}

可以通過抓包的方式偽造X-Forwarded-For頭,如下

三、修復方式

目前很多Web 應用(例如獲取用戶所在地區,基于 IP 做訪問頻率控制,禁止某些IP訪問等等),為了獲取用戶真正的 IP,從 HTTP 請求頭中獲取 IP地址。這些情況下,必須確保獲取到的IP地址是真實可靠的。

經過前面的分析和測試,

1.對于直接使用的 Web 應用,必須使用從TCP連接中得到的 Remote Address,才是用戶真實的IP;

2.對于使用 nginx 反向代理服務器的Web應用,nginx必須使用Remote Address正確配置set Headers,后端服務器則使用nginx傳過來的相應IP地址作為用戶真實IP。

正確配置nginx的方式,就是在最外層的代理服務器強制設定X-Forwarded-For的值為REMOTE ADDRESS。配置如下

proxy_set_header X-Forwarded-For $remote_addr

在最外層Nginx(即直接對外提供服務的Nginx)使用$remote_addr代替上面的$proxy_add_x_forwarded_for,可以防止偽造X-Forwarded-For。$proxy_add_x_forwarded_for會在原有X-Forwarded-For上追加IP,這就相當于給了偽造X-Forwarded-For的機會。而$remote_addr是獲取的是直接TCP連接的客戶端IP,這個是無法偽造的,即使客戶端偽造也會被覆蓋掉,而不是追加。

其它一下相似的消息頭,也可以嘗試使用這些消息頭進行繞過

X-Originating-IP: 127.0.0.1X-Remote-IP: 127.0.0.1X-Client-IP: 127.0.0.1X-Forwarded-For: 127.0.0.1X-Forwared-Host: 127.0.0.1X-Host: 127.0.0.1X-Custom-IP-Authorization: 127.0.0.1


閱讀原文:原文鏈接


該文章在 2025/5/14 9:29:40 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 妓女日韩一区二区三区 | 亚洲综合成人婷婷五月在线观看 | 国产成人aⅴ国产在线观 | 国产 高清 无码 在线播放 | 国产寡妇亲子伦一区二区三区四区 | 日本不卡精品免费在线 | 色-情-乱-交-二三区视频 | 噜噜噜在线观看播放视频 | 国产色情A久久无码影 | 中文字幕 日韩 人妻 无码 | 国产精品一区二区久久久蜜桃 | 国产探花在线精品一区二区 | 一级特黄AAA大片在线观看 | 国产成人精品免高潮 | 国产精品综合av一区二区国产馆 | 午夜DJ国产精华日本无码 | 久久久久影院美女国产主播 | 成人性生交大片免费看中文 | 午夜色情影视免费播放 | 日本VS中国VS亚洲看无码A | 日韩一道本高清不卡专区 | 国产精品有码专区囯产精品久久精品 | 2024狠狠噜天天噜日日噜 | 精品一区二区三区在线视频观看 | 欧美日韩美利坚在线观看 | 国产精品69人妻无码久久久 | 日韩成人免费国产电影 | 91天堂一区二区三区在线 | 欧美亚洲在线播放 | 日本熟妇厨房xxxxx乱 | 欧美一区二区高清 | 久久草视频这里只精品免费 | 久久精品AV一区二区无码 | 人之初激絶頂痙攣在线观看 | 午夜精品射精入后重之免费观看 | 国产在线观看91精品2024 | 国产网友自拍视频 | 日韩精品一区在线观看 | 精品日本永久免费网站 | 麻豆国内剧情a | 欧美在线视频 |