国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Nginx】proxy_set_header的變量與X-Forwarded-For偽造客戶端IP漏洞

這篇具有很好參考價值的文章主要介紹了【Nginx】proxy_set_header的變量與X-Forwarded-For偽造客戶端IP漏洞。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

上面突然說,需要檢查Nginx反向代理的安全問題并給出了修改方法,小白的我一臉懵逼,明明都是中文,連在一起咋就看不明白了。于是乎,對著修改內(nèi)容簡單學(xué)習(xí)了一下,在此做個記錄,如有問題請大佬們指點指點。

1、proxy_set_header的參數(shù)

在Nginx中的location里,我們通常會配置proxy_set_header,如下代碼:

# 定義轉(zhuǎn)發(fā)分配規(guī)則
upstream kwtest {
	server ip1:port;
	server ip2:port;
}

server {
	listen	8080; # Nginx監(jiān)聽端口

	location /testApi {
		# 反向代理
		proxy_pass http://kwtest;
		# 在原本的nginx中,這個是默認(rèn)的
		proxy_set_header Host $http_host;
	}
}

1.1 具體參數(shù)

這里來解釋一下這個參數(shù)$http_host,以及后面會講到的參數(shù)。

proxy_set_header參數(shù) 含義
$http_host 請求頭中的完整的主機名或IP地址(包括端口號)
$host 請求頭中的Host字段,主機名或IP地址(不包括端口號)
$remote_addr 是客戶端的IP地址
$proxy_add_x_forwarded_for 獲取客戶端真實的 IP 地址

1.2 客戶端請求過來的 HTTP 請求頭中的主機名或IP地址,與客戶端的 IP 地址有什么不同

  • 客戶端請求過來的 HTTP 請求頭中的主機名或IP地址:這里的IP不是客戶端的IP,是服務(wù)器端的IP【eg.系統(tǒng)部署的地方】
  • 客戶端的 IP 地址:用戶的IP地址【eg.瀏覽器打開的頁面】

1.3 客戶端的IP地址 與 獲取客戶端真實的 IP 地址有什么不同

$remote_addr是 Nginx 服務(wù)器記錄的發(fā)起連接的客戶端 IP 地址,是從網(wǎng)絡(luò)層獲取的客戶端 IP,也就是請求到達(dá) Nginx 服務(wù)器的 IP 地址。這個變量通常在直接與客戶端通信的情況下使用,例如,客戶端直接請求 Nginx 服務(wù)器時,可以通過$remote_addr獲取客戶端的真實 IP 地址。

$proxy_add_x_forwarded_for是 Nginx 在作為反向代理服務(wù)器時,從 HTTP 請求頭中提取客戶端的真實 IP 地址。當(dāng) Nginx 作為反向代理服務(wù)器時,客戶端請求會經(jīng)過反向代理服務(wù)器,再由反向代理服務(wù)器轉(zhuǎn)發(fā)給后端的真實服務(wù)器處理。在這個過程中,Nginx 在請求頭中添加了 X-Forwarded-For 字段,并將客戶端的真實 IP 地址追加到該字段的末尾。$proxy_add_x_forwarded_for可以從這個字段中提取出客戶端的真實 IP 地址,從而獲取客戶端的真實 IP 地址。

因此,$remote_addr$proxy_add_x_forwarded_for都是用于獲取客戶端 IP 地址的,但是 $remote_addr 適用于直接與客戶端通信的場景,而 $proxy_add_x_forwarded_for 適用于 Nginx 作為反向代理服務(wù)器時獲取客戶端真實 IP 地址的場景,二者的使用場景不同。

2、X-Forwarded-For偽造客戶端IP漏洞

這部分主要看利用X-Forwarded-For偽造客戶端IP漏洞成因及防范這篇文章。雖然很詳細(xì),但理解完后,過一段時間忘了又得再理解。因此,以下內(nèi)容主要對這篇文章的總結(jié),快速回憶。

proxy_set_header x-forwarded-host,Nginx,nginx,tcp/ip,運維

  • 注意:
    $proxy_add_x_forwarded_for 會將和Nginx直接連接的客戶端IP追加在請求原有X-Forwarded-For值的右邊。
    $remote_addr 這個是無法偽造的,即使客戶端偽造也會被覆蓋掉,而不是追加。
  1. 存在多層Nginx情況下:
# 外層
server {
	listen	8080; # Nginx監(jiān)聽端口

	location /testApi1 {
		# 反向代理
		proxy_pass http://kwtest1;
		proxy_set_header X-Forwarded-For $remote_addr;
	}
}

# 內(nèi)層
server {
	listen	8080; # Nginx監(jiān)聽端口

	location /testApi2 {
		# 反向代理
		proxy_pass http://kwtest2;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}
}

如果有多層代理,那么只要在直接對外訪問的Nginx上配置X-Forwarded-For為$remote_addr,內(nèi)部層的Nginx還是要配置為$proxy_add_x_forwarded_for,不然內(nèi)部層的Nginx又會覆蓋掉客戶端的真實IP。

  1. 單層Nginx,即對內(nèi)又對外的情況:
# 內(nèi)外層
server {
	listen	8080; # Nginx監(jiān)聽端口

	location /testApi3 {
		# 反向代理
		proxy_pass http://kwtest3;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}
}

X-Real-IP 頭部會包含真實的客戶端 IP 地址,X-Forwarded-For 頭部會包含一個逗號分隔的 IP 地址列表,其中第一個 IP 地址應(yīng)該是真實的客戶端 IP 地址文章來源地址http://www.zghlxwxcb.cn/news/detail-826120.html

到了這里,關(guān)于【Nginx】proxy_set_header的變量與X-Forwarded-For偽造客戶端IP漏洞的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Nginx負(fù)載均衡代理proxy_set_header設(shè)置和透傳https協(xié)議

    最近基于Nginx + (Nginx + PHP7)的技術(shù)生態(tài)做負(fù)載均衡,其中PHP框架使用的是ThinkPHP5,支付業(yè)務(wù)中使用了微信支付,其中有一處邏輯:獲取當(dāng)前請求的域名并且微信支付的回調(diào)地址 thinkRequest::instance()-domain() ,本來小程序端訪問的是https協(xié)議,做了負(fù)載均衡之后,在程序中獲取到的

    2024年01月25日
    瀏覽(24)
  • nginx.conf報錯:“set“ directive is not allowed here in xxx(http塊下不能用set定義變量)

    nginx.conf報錯:“set“ directive is not allowed here in xxx(http塊下不能用set定義變量)

    在nginx.conf的http塊中定義變量: 在server塊中使用變量替換IP地址: 然后nginx容器啟動的時候就報錯了: 原因:我不該把這句直接加到http塊下, 要這樣加到http塊下的server塊下的location里: 這樣就沒問題 但是我又另外報了一個錯誤: using uninitialized \\\"server_ip_addr\\\" variable 我另外記

    2024年02月13日
    瀏覽(50)
  • http.header.Set()與Add()區(qū)別;

    在Go語言中進(jìn)行HTTP請求時, http.Header 對象表示HTTP請求或響應(yīng)的頭部信息。 http.Header 是一個 map[string][]string 類型的結(jié)構(gòu),用于存儲鍵值對,其中鍵表示HTTP頭字段的名稱,值是一個字符串切片,可以存儲多個相同名稱的頭字段值。 http.Header 提供了兩個主要的方法來設(shè)置頭部字

    2024年02月07日
    瀏覽(16)
  • Refused to set unsafe header “cookie“

    記 web端微信登陸之后,保存登錄狀態(tài)的問題: 發(fā)送給后臺的后續(xù)請求在head添加 但是報錯 Refused to set unsafe header “cookie” 原因是w3c中不允許手動設(shè)置cookie 解決方法: 1.把Cookie改成Authorization,讓后端從Authorization中拿到相關(guān)登錄信息; 2.前端來做登錄,每次發(fā)送openid給后臺,

    2024年02月06日
    瀏覽(12)
  • ngx_http_set_response_header閱讀

    1.關(guān)于設(shè)置頭的一些函數(shù)指針初始化 2.設(shè)置header的初始化函數(shù) 3.ngx_http_set_response_header閱讀理解 4.最終的執(zhí)行是在ngx_http_headers_filter函數(shù)中 5.ngx_array_t的定義 6.看一看special_header的處理-ngx_http_send_error_page

    2024年02月05日
    瀏覽(27)
  • [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

    如果你的node.js提示: [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client 那么,代表你返回了結(jié)果,但是最后你又不小心再返回了一次。通常是由于方法沒有進(jìn)行等待,或者多條件判斷缺漏造成的。 情況一:返回機制問題 通過success/error模式來返回結(jié)果,取消最終的

    2024年02月10日
    瀏覽(18)
  • Nginx Proxy服務(wù)器 Proxy緩存模塊

    Proxy緩存 緩存類型 網(wǎng)頁緩存 (公網(wǎng))CDN 數(shù)據(jù)庫緩存 memcache redis 網(wǎng)頁緩存 nginx-proxy 客戶端緩存 瀏覽器緩存 模塊 ngx_http_proxy_module 語法 緩存開關(guān) Syntax: proxy_cache zone | off; Default: proxy_cache off; Context: http, server, location 代理緩存 Syntax: proxy_cache_path path [levels=levels] keys_zone=name:size[

    2024年02月02日
    瀏覽(23)
  • 使用Charles小貼士之報錯(Notes SSL Proxying not enabled for this host: enable in Proxy Settings)

    使用Charles小貼士之報錯(Notes SSL Proxying not enabled for this host: enable in Proxy Settings)

    (報錯的總結(jié)持續(xù)更新,報錯單獨寫這樣好找一點) 報錯1: SSL Proxying not enabled for this host: enable in Proxy Settings 昨天用還好好的,今天使用就報(Notes ? ? ? ?SSL Proxying not enabled for this host: enable in Proxy Settings) 原因是:我手機wifi代理IP搞錯了,在電腦的cmd找ip地址跟charles了的地

    2024年02月03日
    瀏覽(19)
  • Nginx Proxy反向代理

    反向代理是一種網(wǎng)絡(luò)架構(gòu),它通過將客戶端的請求轉(zhuǎn)發(fā)到后端服務(wù)器,并將后端服務(wù)器的響應(yīng)返回給客戶端,實現(xiàn)了客戶端和服務(wù)器之間的間接通信。與正向代理不同,正向代理是代理客戶端,而反向代理是代理服務(wù)器。 以下是反向代理的基本原理: 客戶端發(fā)起請求: 客戶

    2024年01月20日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包